新手求助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:04 编辑
仿了一下没什么问题。
编辑原因:修改附件插入
shandandan 发表于 2014-3-20 13:01
仿了一下没什么问题。
我的LED电平是红色
能上传工程包么 本帖最后由 huangqi412 于 2014-3-20 13:13 编辑
看到了,谢谢,我试试先。
额,我只会用QUARTUS,你的工程不知道怎么用 huangqi412 发表于 2014-3-20 13:06
我的LED电平是红色
能上传工程包么
修改了下,有工程包 这样,红线 不是语法问题就就帮不了你了。
这种情况什么都有可能:模块没有例化,led_1那根线没接上,等等等等
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 没有初始化初值所以显示红色。 试着:
output led_1; //LED
改成
output led_1=1'b0; //LED
PS:实际运行初值肯定是无效的。 key_led i1 (
.key_left(key_left),
.key_right(key_right),
.led_1(led_1)
);
这个是组合逻辑的版本?clk没接? 本帖最后由 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仿真和门级仿真,组合逻辑和时序逻辑对比很明显。 同一个工程,两段代码,我是用注释来选择的。VERILOG里是不是没有类似C里的#if条件编译, huangqi412 发表于 2014-3-20 14:21
同一个工程,两段代码,我是用注释来选择的。VERILOG里是不是没有类似C里的#if条件编译, ...
有的啊,不过我从来没用过 shandandan 发表于 2014-3-20 14:25
有的啊,不过我从来没用过
{:handshake:} {:lol:} 再次感谢了 huangqi412 发表于 2014-3-20 14:34
再次感谢了
{:handshake:}大家互相学习~
页:
[1]