verilog 写rtl注意事项_Verilog RTL代码风格介绍

1 使用标准的DFF模块例化生成寄存器

寄存器是数字同步电路中最基本的单元。使用Verilog进行数字电路设计时,最常见的方式是使用always块语法生成寄存器,要点如下:对于寄存器避免直接使用always块编写,而是应该采用模块化的标准DFF模块进行例化。示例如下所示,一个名为flg_dfflr的寄存器,除了时钟(clk)和复位信号(rst_n)之外,还带有使能信号flg_ena和输入(flg_nxt)/输出信号(flg_r)。

wire flg_r;

wire flg_nxt = ~flg_r;

wire flg_ena = (ptr_r == ('E203_OITF_DEPTH - 1)) & ptr_ena;

//此处使用例化sirv_gnrl_dfflr的方式实现寄存器,而不是使用显示的always块sirv_gnrl_dfflr #(1) flg_dfflrs(flg_ena, flg_nxt, flg_r, clk, rst_n);

使用标准的DFF模块例化的好处包括以下内容:便于全局替换寄存器类型;

便于在寄存器中全局插入延迟;

明确的load-enable使能信号(如下例的flg_ena)方便综合工具自动插入寄存器级别的门控时钟以降低动态功耗;

便于规避Verilog语法if-else不能传播不定态的问题。

标准DFF模块是一系列不同的模块,结构如下:

|----rtl//存放RTL目录

|----e203//E203核和SoC的RTL目录

|----general//存放一些通用模块的RTL代码

|----sirv_gnrl_dffs.v//该文件中编写了一系列不同的DFF模块

你可能感兴趣的:(verilog,写rtl注意事项)