打印
[FPGA]

modelsim能做纯组合电路的仿真吗?

[复制链接]
1918|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
angelcoffee|  楼主 | 2015-10-5 21:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

如题,刚学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的波形仿真吗?

相关帖子

沙发
angelcoffee|  楼主 | 2015-10-5 21:55 | 只看该作者
testbench中不加clk,直接在initial中给a延时赋值怎么样?

使用特权

评论回复
板凳
玄德| | 2015-10-5 22:15 | 只看该作者

modelsim可以仿真组合逻辑、时序逻辑。

使用特权

评论回复
地板
zener818| | 2015-10-5 22:37 | 只看该作者
用task 给输入赋值观察波形

使用特权

评论回复
5
angelcoffee|  楼主 | 2015-10-7 09:05 | 只看该作者
zener818 发表于 2015-10-5 22:37
用task 给输入赋值观察波形

嗯,懂了。已经仿真成功了!

`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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

0

粉丝