从今天开始学习潘文明老师的《大道至简设计法》,因为自己的模块设计能力有待提高,代码风格有待优化。
第一章 模块
1.1 模块结构
模块由五部分组成:
- 端口定义
- 参数定义(可选)
- I/O说明
- 内部信号说明
- 功能定义
//端口定义
module module_name(
clk, //端口1,时钟
rst_n, //端口2,复位
dout //其他信号,如dout
);
//参数定义(可选)
parameter DATA_W = 8;
//I/O说明
input clk; //输入信号定义
input rst_n; //输入信号定义
output [DATA_W-1:0] dout; //输出信号定义
//内部信号说明
reg [DATA_W-1:0] dout; //信号类型(reg、wire)定义
reg signal1; //信号类型(reg、wire)定义
/****************************************************************/
//功能定义部分
//组合逻辑写法
always@(*)begin
......
end
//时序逻辑写法
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
end
else begin
end
end
/*****************************************************************/
endmodule
1.模块的端口定义
声明模块的输入输出口
2.参数定义
将常量用符号代替,以增强可读性和可修改性
parameter DATA_W = 8;
3.I/O说明
input
output
inout
4.内部信号说明
reg
wire
5.功能定义
三种方法可以完成逻辑功能描述:
- assign声明语句;eg: assign a = b & c ;
- 模块例化
- always块
1.2 模块的三大架构
- 计数器架构
- 状态机架构
- FIFO架构
几乎所有模块都可以用其上三种架构组合设计
FIFO架构具有读写时钟分离的特点,可以作为模块间数据传输的缓存。应用于数据跨时钟域传输。