FPGA的模块

Verilog的基本设计单元是“模块”( block),一个模块是由两部分组成的。

一部分描述接,另一部分描述逻辑功能即定义输入是如何影响输出的。

 

 

  从这一例子可以看出, Verilog结构位于在 module和 endmodule声明语句之间,每个Verilog程序包括4个主要部分:端口定义、I/O说明、内部信号声明和功能定义。

 

module led (
input sys_clk,
input sys_rst_n,
output reg [2:0] led // 110 B, 101 R, 011 G   3个bit的变量,数据位宽3代表3个IO接口,最低位的IO是蓝灯...
);

reg [23:0] counter;    // 24个bit的变量,用来存储时钟数目,计时用。不在led()内,不输出到IO。

 

 

//计数器对系统时钟计数,计时0.5秒

always @(posedge sys_clk or negedge sys_rst_n) begin 

//posedge表示上升沿 ,negedge表示下降沿 ,条件触发。
if (!sys_rst_n)  

//sys_rst_n 为复位状态,counter直接赋值为24个0【十进制的0】【变量是24位的】
counter <= 24'd0;
else if (counter < 24'd1200_0000) // 0.5s delay
counter <= counter + 1;
else
counter <= 24'd0; 

//时间超过【24'd1200_0000】也要重新计数
end

 

//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态

always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)   
led <= 3'b110;  //复位的时候是蓝灯先亮
else if (counter == 24'd1200_0000) // 0.5s delay  时间到达的时候,改变灯的状态
led[2:0] <= {led[1:0],led[2]};
else
led <= led;
end

endmodule

 

 

程序解说:

https://www.cnblogs.com/tech-zyl/p/9879806.html

 

 

 

 

 

 

 

变量的几点:

1、整数 【数据位宽 ,进制,数值】

2、x值【不确定】,z值【高阻态】

3、负数在最前加-号

4、数值可以用下划线增加阅读性

5、常量默认32位宽度。

 

 

 

https://bbs.elecfans.com/forum.php?mod=viewthread&page=1&tid=1117015

疑问

刚开始学习FPGA,还没从MCU的思想中走出来,总是觉得always中如果语句过多,会出现类似MCU中断中程序过多,超过中断时间导致程序混乱。大神们,always会出现这种现象吗?如果不会为什么不会呢?

解答

理论上不会,如果超过一个时钟的话,就是时序不满足了!这通过软件可以看出来,这就说明你的设计不科学了!

解答

always 不是中断,你这理解不对,always @ (posedge clk)是表示每个上升沿我要做的事!你写多少我都要做完,做不完就会出现时序问题了!这个综合结果可以看出来的!

 

posted @ 2021-01-23 22:53  流水江湖  阅读(500)  评论(0编辑  收藏  举报