微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 我今天写了我生平第一个FPGA代码,遇到了问题向大神请教。

我今天写了我生平第一个FPGA代码,遇到了问题向大神请教。

时间:10-02 整理:3721RD 点击:
我写的是流水灯的代码,我的想法是把50MHZ的始终分频得到一个2HZ的时钟,然后检测到这个2HZ时钟的上升沿时改变LED的亮灭情况。实际效果是达到了,但是每当LED变化的一瞬间全部的LED总是快速闪烁一下。以下是我的代码请大家指教。module LED_Clock
(
        input sck,
input rst_n,
output led_en
);
reg [25:0] cnt;
always@(posedge sck or negedge rst_n)
begin
if(!rst_n)
cnt <= 26'd0;
else if(cnt<49_999_999)
cnt <= cnt+1'b1;
else
cnt <= 26'd0;
end
assign led_en = (cnt > 26'd25_000_000) ? 1'b1 : 1'b0;
endmodule
module LED_module
(
        input sck,
input rst_n,
input led_en,
output reg [3:0] LED_Data
);
always@ (posedge led_en or negedge rst_n)
begin
if(!rst_n)
LED_Data[3:0] <= 4'b0001;
else
LED_Data[3:0] <= {LED_Data[2:0],LED_Data[3]};
end
endmodule
module LED_Runing
(
   input sck,
input rst_n,
output [3:0] LED_Data
);
wire led_en;
LED_Clock LED_Clock_Init
(
.sck (sck),
.rst_n (rst_n),
.led_en (led_en)
);
LED_module LED_module_Init
(
.sck (sck),
.rst_n (rst_n),
.led_en (led_en),
.LED_Data (LED_Data)
);
endmodule

建议小编先做一下功能仿真看看,如果还是没发现问题,可以用时序仿真,或signaltap观测(quartus自带)。另外,写个流水灯不用这么麻烦,一个module就能搞定了,这样写有点乱,而且有可能会产生毛刺



   谢谢指点

不要用分频时钟作为敏感性号,有毛刺的always@ (posedge led_en or negedge rst_n)
module test(
        input sck,
        input rst_n,
        output reg [2:0] LED_Data);
       
reg [25:0] cnt;
always@(posedge sck or negedge rst_n)
begin
        if(!rst_n)
                cnt <= 0;
        else if(cnt>26'd49_000_000)
                cnt <=0;
        else
                cnt<=cnt+1'b1;
end
always@ (posedge sck or negedge rst_n)      //要用系统时钟
        begin
        if(!rst_n)
                LED_Data[2:0] <= 3'b001;
        else if(cnt==0)          //改成这样就正常了
                LED_Data[2:0] <= {LED_Data[1:0],LED_Data[2]};
        end
       
endmodule
分成多个模块写是没有问题的



   多谢多谢,为什么用敏感信号作为时钟会有毛刺呢?



    可以去看看规范,不要用分频始终做敏感信号,至于为什么,我认为是不是因为在系统时钟的时候会产生两个时钟?

为了学习而点的这个灯吧!弄得这么复杂还上原语了。
LED_Data[3:0] <= {LED_Data[2:0],LED_Data[3]};这句位拼接并没有指定具体的LED_Data每一位值给0还是1,难道是在原语里面操作的?如果没有指定,你这个亮完之后就有问题啦

太复杂了吧 小编 一个分频就可以了啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top