📄 mux.v
字号:
<pre DS>/*
General introduction to Verilog code
Example of an inverting multiplexor done is several
coding styles
*/
// behavioural-level description of an inverting multiplexor
module mux_beh (out, cnt, a, b);
output out;
input cnt, a, b;
reg out;
always @(cnt or a or b)
if (cnt == 1) out = ~a;
else out = ~b;
endmodule // mux_gate
// behavioural-level description of an inverting multiplexor
module mux_beh_2 (out, cnt, a, b);
output out;
input cnt, a, b;
assign out = (cnt == 1) ? ~a: ~b;
endmodule // mux_gate
// functional-level description of an inverting multiplexor
module mux_func (out, cnt, a, b);
output out;
input cnt, a, b;
assign out = ~((cnt & a) |(~cnt & b));
endmodule // mux_gate
// gate-level description of an inverting multiplexor
module mux_gate (out, cnt, a, b);
output out;
input cnt, a, b;
wire cntBar;
wire aval, bval;
not (cntBar, cnt);
and (aval, cnt, a);
and (bval, cntBar, b);
nor (out, aval, bval);
endmodule // mux_gate
// NECESSARY TEST stimulus to verify designs
module stimulus;
reg a, b, c;
wire out1, out2, out3, out4;
integer i;
mux_beh_2 mod1 (out1, c, a, b);
mux_beh mod2 (out2, c, a, b);
mux_func mod3 (out3, c, a, b);
mux_gate mod4 (out4, c, a, b);
initial begin
for (i = 0; i < 8; i = i + 1) begin
{a, b, c} = i[2:0];
#10 $display ($time, " %b %b %b - %b %b %b %b",
a, b, c, out1, out2, out3, out4);
end
#10 $finish;
end // initial begin
endmodule // stimulus
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -