Lagrange Zu 2022-03-29 21:58 采纳率: 100%
浏览 191
已结题

verilog语言做呼吸灯仿真,为啥仿真结果中有的变量一开始没有显示?

问题遇到的现象和发生背景

做呼吸灯的设计,开发板20ns一个系统时钟周期。将2s分为1000个2ms作为呼吸灯变化周期,将2ms分为1000个2us作为呼吸灯变化单元。分别用cnt_2us、cnt_2ms、cnt_2s作为记时2us,2ms,2s的计数器。
用quartus调用modelsim仿真后,将计数器的结果也显示出来,可是这三个计数器一开始却是没有值的!

问题相关代码
//50Mhz,,计数1次20ns
module breath_led(
input wire clk,
input wire rst_n, 
output reg led
);
/*
parameter CNT_2s_END = 999? //??2s????
parameter CNT_2ms_END = 999? //??2ms????
parameter CNT_2us_END = 99? //??2us????
*/
reg [9:0] cnt_2s;            //999转换为二进制需要10个位宽
reg [9:0] cnt_2ms;  
reg [6:0] cnt_2us; 
//--------------------< 2us计数>------------------------------------------
always@(posedge clk or negedge rst_n)
if (rst_n==0)
    cnt_2us <= 0;
else if(cnt_2us == 99) 
    cnt_2us <= 0;
else
    cnt_2us <= cnt_2us+1;
//--------------------< 2ms计数 >------------------------------------------
always@ (posedge clk or negedge rst_n)
if (rst_n ==0)
    cnt_2ms <= 0;
else if( (cnt_2ms == 999) && (cnt_2us == 99) ) 
    cnt_2ms <= 0;
else if( (cnt_2us==99) && (cnt_2ms <999) )
    cnt_2ms <= cnt_2ms+1;
//--------------------< 2s计数 >------------------------------------------
always@ (posedge clk or negedge rst_n)
if (rst_n ==0)
    cnt_2s <= 0;
else if( (cnt_2ms == 999) && (cnt_2us == 99) && (cnt_2s == 999) ) 
    cnt_2s <= 0;
else if( (cnt_2us==99) && (cnt_2ms==999) )
    cnt_2s <= cnt_2s+1;
//--------------------< LED >------------------------------------------
always@ (posedge clk or negedge rst_n)
if(rst_n == 0)
    led <= 0;
else if(cnt_2s > cnt_2ms)
    led <= 1;
else 
    led <=0;

endmodule

tb代码:

`timescale 1 ns/ 1 ps
module breath_led_vlg_tst();
parameter period = 20;
//localparam period = 20;
//--------------------< 端口>------------------------------------------
reg clk;
reg rst_n;
wire led;
//--------------------< 模块例化>------------------------------------------
breath_led breathled_inst(
.clk(clk),
.rst_n(rst_n),
.led(led)
);
//--------------------< 初始信号>------------------------------------------
initial begin
    clk=0; //clk阻塞性赋值
    rst_n<=0;
    #100    //延时100ns便于观察波形
    rst_n<=1;
end
//--------------------< 设计输入信号 >-----------------------------------------
always #(period/2) clk=~clk;
endmodule
运行结果及报错内容

img

img

恳切希望得到解答!!
  • 写回答

2条回答 默认 最新

  • 老皮芽子 2022-03-30 09:32
    关注

    代码没问题能仿真,可能是仿真软件安装设置问题
    led 输出非常窄的脉冲,仿真能看见,实际在板子上 LED 几乎不亮。需要改

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月5日
  • 创建了问题 3月29日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装