我在使用2x1为8x1 mux创建Verilog代码时遇到了困难。我把我的代码放在下面:
设计规范:
module MUX2to1(in, sel, out);
input [1:0]in;
input wire sel;
output reg out;
always@(*) begin
if (sel == 1'b0)
out = in[0];
else
out = in[1];
end
endmodule
module MUX4to1(in, sel, out);
input [3:0]in;
input [1:0]sel;
output out
wire [1:0] MUX_outputs;
MUX2to1 M0 (in[1:0], sel[0], MUX_outputs[0]);
MUX2to1 M1 (in[3:2], sel[0], MUX_outputs[1]);
MUX2to1 M2 (MUX_outputs, sel[1], out;
endmodule
module mux8to1(in , sel, out);
input [7:0] in;
input [2:0] sel;
output out;
wire mux[2:0];
mux4to1 m1 (in[7:4],sel[1:0], MUX_outputs[0]);
mux4to1 m2 (in[3:0],sel[1:0], MUX_outputs[1]);
mux2to1 m3 (mux_1,mux_2,sel[2],out);
endmoduleTestbench
module MUX8to1_tb();
reg [7:0] in;
reg [1:0] sel;
wire out;
MUX8to1 uut (in, sel, out);
initial begin
$dumpfile("dump.vcd");
$dumpfile(0,in);
$dumpfile(0,sel);
$dumpfile(0,out);
in = 4'b1010;
sel = 2'b00;
#100;
sel = 2'b01;
#100;
sel = 2'b10;
#100;
sel = 2'b11;
#100;
end
endmodule 我正在使用EDA操场来完成这项任务。如果有人能提供更简单的方法来做这件事,请告诉我。
发布于 2022-08-28 16:43:35
如果有人能提供更简单的方法来做这件事,请告诉我。
始终使用最高级别的抽象编写Verilog代码。在创建简单的mux时,不需要子模块。所有的设计模块都可以替换为一个模块:mux8to1。
module mux8to1 (
input [7:0] in,
input [2:0] sel,
output out
);
assign out = in[sel];
endmodule
module MUX8to1_tb();
reg [7:0] in;
reg [2:0] sel;
wire out;
mux8to1 uut (in, sel, out);
initial begin
$dumpfile("dump.vcd");
$dumpvars;
in = 8'b0000_1010;
sel = 3'b000;
#100;
sel = 3'b001;
#100;
sel = 3'b010;
#100;
sel = 3'b011;
#100;
end
endmodule 我还对testbench做了一些修改。与其多次调用$dumpfile,不如调用$dumpvars。sel应该是一个3位的信号来匹配mux输入.
下面是在EDAPlaygraound上运行的完整代码。
https://stackoverflow.com/questions/73520024
复制相似问题