huangqi412 发表于 2014-3-20 12:24:54

新手求助VERILOG双控开关仿真不通过

用的quartus verilog初次接触FPGA,暂时无开发板,MODELSIM看波形。

        input                clk;        //时钟       没有用到组合逻辑
        input                key_left;        //按键1
        input                key_right;        //按键2
        output        led_1;        //LED

        assign led_1 = key_left^key_right;        //LED=按键异或连续赋值是连线属性

这是组合逻辑,综合结果是异或门,MODELSIM仿真通过,LED电平变化符合预定情况

        input                clk;        //时钟        加入时钟时序逻辑
        input                key_left;        //按键1
        input                key_right;        //按键2
        output        reg led_1;        //LED

        always @(posedge clk)
             led_1 <=key_left^key_right;        //LED=按键异或 边沿赋值是寄存器属性

这是时序逻辑,综合结果是异或门+寄存器,MODELSIM仿真没通过, 给了CLK信号和KEY信号,但是LED显示是红线,STX应该就是电平状态未知吧?

shandandan 发表于 2014-3-20 13:01:48

本帖最后由 shandandan 于 2014-3-20 13:04 编辑

仿了一下没什么问题。





编辑原因:修改附件插入

huangqi412 发表于 2014-3-20 13:06:56

shandandan 发表于 2014-3-20 13:01
仿了一下没什么问题。




我的LED电平是红色
能上传工程包么

huangqi412 发表于 2014-3-20 13:07:23

本帖最后由 huangqi412 于 2014-3-20 13:13 编辑

看到了,谢谢,我试试先。

额,我只会用QUARTUS,你的工程不知道怎么用

shandandan 发表于 2014-3-20 13:07:34

huangqi412 发表于 2014-3-20 13:06
我的LED电平是红色
能上传工程包么

修改了下,有工程包

huangqi412 发表于 2014-3-20 13:14:30

   这样,红线

shandandan 发表于 2014-3-20 13:19:52

不是语法问题就就帮不了你了。
这种情况什么都有可能:模块没有例化,led_1那根线没接上,等等等等

huangqi412 发表于 2014-3-20 13:25:28


RTL视图

仿真脚本:
`timescale 1 ns/ 1 ns        //仿真时间单位

module key_led_vlg_tst();       

reg clk;                       
reg key_left;       
reg key_right;
                                          
wire led_1;       
                  
        key_led i1 (
                .key_left(key_left),               
                .key_right(key_right),
                .led_1(led_1)
        );
       
//===============这里编辑波形       
initial begin
        key_left        = 1;        //依次各种电平
        key_right         = 1;
        #1000;
        key_left                 = 1;
        key_right         = 0;
        #1000;
        key_left                 = 0;
        key_right         = 1;
        #1000;
        key_left                 = 0;
        key_right         = 0;
        #1000;
        key_left                 = 1;       
        key_right         = 1;
        #1000;       
        $stop;                        //停止
end
      
initial begin
        clk = 0;                //默认等于0
        forever                        //循环翻转 每次10nS
        #10 clk = ~clk;
end
                                                
endmodule

kebaojun305 发表于 2014-3-20 13:32:07

没有初始化初值所以显示红色。

lusson 发表于 2014-3-20 13:40:19

试着:
output      led_1;      //LED
改成
output      led_1=1'b0;      //LED

PS:实际运行初值肯定是无效的。

shandandan 发表于 2014-3-20 13:49:26

key_led i1 (
                .key_left(key_left),               
                .key_right(key_right),
                .led_1(led_1)
      );
这个是组合逻辑的版本?clk没接?

huangqi412 发表于 2014-3-20 14:20:39

本帖最后由 huangqi412 于 2014-3-20 14:31 编辑

shandandan 发表于 2014-3-20 13:49
key_led i1 (
                .key_left(key_left),               
                .key_right(key_ri ...

太感谢了,加上一句CLK就好使了, 先测试的组合逻辑版本,直接改代码变成时序逻辑的,忘了仔细检查仿真脚本。

RTL仿真和门级仿真,组合逻辑和时序逻辑对比很明显。

huangqi412 发表于 2014-3-20 14:21:45

同一个工程,两段代码,我是用注释来选择的。VERILOG里是不是没有类似C里的#if条件编译,

shandandan 发表于 2014-3-20 14:25:05

huangqi412 发表于 2014-3-20 14:21
同一个工程,两段代码,我是用注释来选择的。VERILOG里是不是没有类似C里的#if条件编译, ...

有的啊,不过我从来没用过

huangqi412 发表于 2014-3-20 14:34:11

shandandan 发表于 2014-3-20 14:25
有的啊,不过我从来没用过

{:handshake:} {:lol:} 再次感谢了

shandandan 发表于 2014-3-20 14:44:20

huangqi412 发表于 2014-3-20 14:34
再次感谢了

{:handshake:}大家互相学习~
页: [1]
查看完整版本: 新手求助VERILOG双控开关仿真不通过