1、什么是组合逻辑?
任意时刻的输出仅仅取决于该时刻的输入逻辑。个人认为在verilog中,由与或非门逻辑运算组成的就是组合逻辑。但是组合逻辑什么时候输出就不是组合逻辑含义的范畴了
2、组合逻辑部件有哪些?
(如多路器、比较器、加法器、乘法器、双向三态门和总线等)电路结构和性能的深入了解,是设计复杂数字逻辑系统的基础。
所以应该认真地复习一下它们的结构和逻辑表达式,并用可综合的verilog模块来表示。
多路器
比较器
加法器
乘法器
双向三态门
总线
3、单组合逻辑应用阻塞赋值举例
1、always@(a or b or c or d)
begin
tmp1<=a&b;
tmp2<=c&d;
y<=tmp1|tmp2;
end
//这里需要说的的是,这是一个组合逻辑电路,但是没有达到我们的期望
//因为,这里的tmp1和tmp2是进入always之前的数据,你懂的,并不是我们想要的数据。
2、always@(a or b or c or d or tmp1 or tmp2)
begin
tmp1<=a&b;
tmp2<=c&d;
y<=tmp1|tmp2;
end
//这样虽然实现了功能,但是我们知道他是经过了几重参数传递才实现的。所以效率不高。
3、always@(a or b or c or d)
begin
tmp1=a&b;
tmp2 =c&d;
y =tmp1|tmp2;
end
//这样显然是简单正确的。
4、时序和组合的混合逻辑时,使用非阻塞赋值
1、always@(posedge clk or negedge rst)
if(!rst) q<=1'b0;//这是时序逻辑
else q<=a^b;//这里的异或是组合逻辑
2、always@(a or b)
y=a^b;//组合逻辑(看到组合逻辑就要想到,我们这么写对其他always块会不会有不正确的影响)
always@(posedge clk or negedge rst)
if(!rst) q<=1'b0';
else q<=y;
//也可以用两个always块,你懂的。。。
5、结论
1、使用always块描述组合逻辑时,应采用阻塞赋值语句。
2、在同一个always快中描述时序和组合逻辑电路时,用非阻塞赋值。
摘自:verilog数字系统设计教程