Verilog代码规范
文章平均质量分 79
无风地带
这个作者很懒,什么都没留下…
展开
-
Verilog代码规范(五) -- if & case语句
if语句优先级由上而下,越靠近下面的输入在综合时越靠近输出:(不允许if并列写法)Examplealways @(*) begin if(sel_A) Data_out = Data_A; if(sel_B) Data_out = Data_B; if(sel_C) Data_out = Data_C; end注:不推荐上述写法是因为没有else容易产生latch。同时,如果条件并非互斥,则可能会有意想不到的结果;上述写法可以修改为如下可以避免latch:(Lint L原创 2021-05-11 10:11:02 · 10245 阅读 · 0 评论 -
Verilog代码规范(四)-- 状态机简述
一段式状态机(不推荐) 查看例子:npu的tlite_teq_pp.v 二段式状态机(不反对) 第一段:时序逻辑采用同步时序的方式描述状态转移; always @(posedge clk or negedge rst_n) begin if(!rst_n) state <= IDLE; else state <= next_state;end 第二段:组合逻辑的方式判断状态转移条件,描述状态转换规律;并在该状态下输出信号; always @(..原创 2021-05-10 13:47:53 · 1588 阅读 · 1 评论 -
Verilog代码规范(三) -- assign & always & for
这一节简单聊聊 assign & always & for 三种语句中会出现的代码规范问题。代码规范(三)数值的实际位宽大于指定的位宽会导致截位。如果截掉的bit中非全零,可能会错;(Assign Rules W19)- 2'b111: 发生截位,会报W19;- 2'b011:默认不会报,但是若设置了strict,则会报W19- 2'd15, 1’d3:发生截位,会报W19;- 2'd03, 4'd0014:虽然发生截位,但是不报W19,因为截断位都是0;- 3'.原创 2021-05-08 09:29:41 · 2945 阅读 · 2 评论 -
Verilog代码规范(二)-- 时钟复位
代码规范(二)上次代码规范主要介绍了模块格式,信号命名,注释,表头等内容,今天主要介绍一些时钟复位的相关内容;一、时钟部分1. 时钟生成和门控放在某个特定模块crm中统一管理。如果时钟在某个模块的内部产生,则spyglass会报W401的warning,提示时钟信号不是当前模块的输入信号。2. 块中使用不止一个时钟,会导致不可综合虽然很多综合工具支持多时钟的综合,但是并非好的代码习惯;除非你确认综合工具支持多时钟输入的综合,否则依然建议只有单时钟输入,将原来的代码块拆分;.原创 2021-05-07 10:55:29 · 2831 阅读 · 1 评论 -
Verilog代码规范(一)
代码规范很多都是team的统一要求,有些并非是强制,team内遵循某个约定,以方便阅读、管理。代码规范的好处:方便他人阅读,交流和理解;以及后期的继承和维护; 方便自己阅读,修改和管理; 有效减少从设计,仿真和综合的迭代时间和迭代次数; 良好的代码风格和代码规范,让design变得愉快,相反,会很痛苦;(亲生子和继子) 信号命名 模块格式 时钟 复位 assign语句 if语句 case语句 加default值可预防la原创 2021-05-06 10:05:10 · 5373 阅读 · 3 评论