电子说
常见的模块介绍:选择器;译码器;解码器;比较器。这里我们主要从常见的Verilog描述的层面去介绍,而不着重考虑电路。将会提到的Verilog语句有 条件选择语句,case语句,if-else。
选择器:电路示意图如下。根据SEL信号,选择将D0还是D1,或者D3传递给D_O。即根据SEL信号选择,将某一个输入信号传递给D_O。
对于只有两个输入信号的选择器,我们可以用单层条件选择语句描述。例如输入只有D0,D1两个。那么SEL只要为单bit即可实现选择。SEL为0时,选择将D0传递给D_O;SEL为1时,选择将D1传递给D_O;
assign D_O = (SEL) ? D1:D0;
注意:条件选择语句功能: 当 ( ) 里面的 expression0 的条件为真时,则选择第一个表达式expression1里面的结果,否则选择 :后面expression2的结果。结构如下:
assign out = (expression0) ? expression1 : expression2
有多个输入信号时。例如:有3个输入,D0,D1,D2; 因为2的2次方等于4,故SEL最小的位宽应该为2。若要实现如下选择功能。
对应可以使用 case 语句描述:
reg[7:0] D_O;
always @(*) begin
case(SEL[1:0])
2b00: D_O = D0;
2b01: D_O = D1;
2b10: D_O = D2;
default: D_O = h0;
endcase
end
注意:case语句,如果SEL的所有组合没有列全,最好在最后要加上 default: ... 项,使得信号完整。如此综合出来的电路才不会出现锁存器。
对应的可以用case语句去描述它的功能:
reg[7:0] D_O;
always @(*) begin
case(D_IN[2:0])
3b000: D_O = 8b1111_1110;
3b001: D_O = 8b1111_1101;
3b010: D_O = 8b1111_1011;
3b011: D_O = 8b1111_0111;
3b100: D_O = 8b1110_1111;
3b101: D_O = 8b1101_1111;
3b110: D_O = 8b1011_1111;
3b111: D_O = 8b0111_1111;
endcase
end
同样对于8-3解码器,大家可以自行去练手。
比较器,或者说判断器。比如比较两个数的大小,当a>b是,输出信号en为高,否则为低。
if-else描述:
reg en;
always @( * )
if( a>b )
en = 1;
else
en = 0;
当然也可以用条件选择语句:
wire en;
assign en = (a>b) ?1b1 : 1b0;
本文重在通过逻辑实例帮助大家理解常见的Verilog逻辑描述语言。大家在知道自己要实现的功能的情况下,去选择合适的描述方式。
全部0条评论
快来发表一下你的评论吧 !