如题,刚学FPGA的新人,把Verilog语法简单看了看,开始跑例程,尝试编写testbench时看到3_8译码器简单的例子
的时候想到这个问题。modelsim只能做时序仿真吗?有没有老版本的quartusii那样可以手动加电平波形,检测组合
电路逻辑的功能???
比如这个例程:
/*键盘key1-key9,在数码管上显示0-9*/
module encode(a,c,en);
input[9:1] a;
output[7:0] c;
output[7:0] en;
reg[7:0] c;
reg[3:0] c_tmp;//将0-9位选择的换成可理解的十进制
integer i;
assign en=0;//位选,这里直接选择第一位
//独码解成二进制码
always@(a)
begin
c_tmp=0;
for(i=1;i<=9;i=i+1)
begin
c_tmp=i;
end
end
//二进制码用数码管表示,选用的是共阳极,所以0为有效输出
always@(c_tmp)
begin
case(c_tmp)
4'b0000:
c=8'b0000_0011;
4'b0001:
c=8'b1001_1111;
4'b0010:
c=8'b0010_0101;
4'b0011:
c=8'b0000_1101;
4'b0100:
c=8'b1001_1001;
4'b0101:
c=8'b0100_1001;
4'b0110:
c=8'b0100_0001;
4'b0111:
c=8'b0001_1111;
4'b1000:
c=8'b0000_0001;
4'b1001:
c=8'b0001_1001;
default:
c=8'b0000_0000;
endcase
end
endmodule
我能手动加a的波形或者怎么写testbench,使得C输出?我试过一种认为加一段CLK,让按键循环按下的程序。但可以纯组合,手动加a的波形仿真吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
嗯,懂了。已经仿真成功了!
`timescale 1 ns/ 1 ns
module encode_vlg_tst();
reg [9:1] a;
// wires
wire [7:0] c;
wire [7:0] en;
integer k;
encode i1 (
// port map - connection between master ports and signals/registers
.a(a),
.c(c),
.en(en)
);
initial
begin
a=9'b111111111;
end
task init_a;
reg [9:1] b;
begin
b=9'b111111111;//赋值语句必须在begin_end中
for(k=0;k<9;k=k+1)
begin
#10 a<=(b&9'b000000001)<<(k);
end
end
endtask
always init_a;
endmodule
一周热门 更多>