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

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日

悬赏问题

  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 paddle库安装时报错提示需要安装common、dual等库,安装了上面的库以后还是显示报错未安装,要怎么办呀?
  • ¥20 找能定制Python脚本的
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀
  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用
  • ¥15 ios可以实现ymodem-1k协议 1024字节传输吗?
  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?