关于RGB彩条仿真的FPGA代码修改

 这是我昨天遇到的一个问题:

FPGA仿真求助-优快云博客

简单来说是判定启动的led_en处于不定状态。而led_en无法启动的原因很简单:

不等式左边的h_cnt、v_cnt,以及等式右边的h_sync、h_back、h_disp等信号并没有赋值,从一开始就处于不定状态。

经过检查,h_cnt、v_cnt两个信号可以复位置0,而h_sync、h_back、h_disp等信号并没有复位置零的相关代码,这也造成了一个大问题——不等式右边的信号一开始就是不确定的,led_en这个信号也变成了不确定状态。

而RGB彩条模块在仿真时,怎么启动呢?——根据led_en进行判断。

assign lcd_rgb = lcd_de ? {24{1'bz}} : 24'h80;

而根据我阅读完整个代码,它的逻辑是这样的:

1、想要上电启动,必须确定led_en使能信号。

2、想要确定使能信号,必须要给ID号。

3、想要获得ID号,必须上电。

好了,它的仿真直接变成死循环了。 那么有没有破解之道呢?有的,那就是让led_en变成确定的信号。让判断语句可以正常运行。

assign  lcd_en = ((h_cnt >= h_sync + h_back) && 
                 (h_cnt < h_sync + h_back + h_disp)&& 
                 (v_cnt >= v_sync + v_back) && 
                 (v_cnt < v_sync + v_back + v_disp))?1'b1:1'b0;

做法很简单,那就是可h_sync、 h_back 、h_disp一开始就复位归零。添加以下代码即可:

always @(posedge lcd_pclk or negedge rst_n) begin
    if(!rst_n)begin
      h_sync  <= 0; 
      h_back  <= 0; 
      h_disp  <= 0; 
      h_total <= 0;
      v_sync  <= 0; 
      v_back  <= 0; 
      v_disp  <= 0; 
      v_total <= 0;  
    end

这是修改代码之后的仿真结果 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值