- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
明德扬点拨FPGA高手进阶 第五章 verilog快速掌握 5.6 设计规范精选
5.6 设计规范
5.6.1 1 个always1 个信号
always@(posedge clk or negedge rst_n) begin
if(rst_n 1’b0)begin
b = 1’b0;
a = 1’b0;
else begin
b = 1’b1;
a = b;
end
end
通常的 verilog 代码,一个 always 里面会设计多个信号,例如上图,这个 always
语句同时设计了 a 和 b 两个信号。明德扬建议一个 always 只设计一个信号,例如上面
代码应该改为以下代码。
always@(posedge clk or negedge rst_n) begin
if(rst_n 1’b0)begin
b = 1’b0;
else begin
b = 1’b1;
end
end
always@(posedge clk or negedge rst_n) begin
if(rst_n 1’b0)begin
a = 1’b0;
else begin
a = b;
end
end
上面两段代码,其综合出来的电路是完全一样的。后面的代码甚至还比较长,但
明德扬仍然推荐后面的代码写法,这样做的好处有:
1. 一心一用。每段 always 同时只考虑 1 个信号的设计,不用考虑其他无关的信号。
例如设计 a 时,就全力想 a 信号,不用考虑 b 信号。这样有助于写出最简、最高
效的代码。
2. 有助于按照定义实现信号。设计的第一步是定义信号,该信号干什么用,什么时
候为 0,什么时候为其他值,都在设计前定义好。always 就根据这个定义来写代
码,非常简单。
3. 方便查找和定位问题。如果代码出现问题,方便查找问题的源头。只要找到与定
义不一致的那段always 代码,修改该段代码,就能解决好问题。
4. 修改代码影响最小。修改代码时,只修改本信号,而不会对其他信号造成影响。
否则很有可能修改 1 个信号,导致其他本来已经正确的信号又变错误。很多同学
设计时,容易反反复复,经常按下葫芦又起瓢,最后是勉勉强强成功,但这样的
系统,可靠性能有多高呢。
5. 有助于衡量工作进度。做好设计定义后,就非常清楚有多少信号需要设计。只要
按照定义写好代码,该信号的设计就基本完成,出错的概率很低。即使后期有错
误,修改相应的那个信号就解决问题。但如果多个信号集中到一个 always,每个
信号之间相互影响,不到最后时刻,你都不清楚还有多少设计未完成。工作中曾
经出现这样情景:产品设计号称进度是 99%,但后期修改 1 个错误,进而影响了
其他信号,基本上其他信号都要重新设计,进度一下子又退回了50% 。
6. 容易修改代码。多个信号集中在一个 always ,修改代码时,你只能见缝插针,还
要极力避免影响其他信号,非常困难。
7. 有助于硬件思维设计。一个always 设计 1 个信号,这段always 很容易理解为一个
电路模块,从而设计出最高效的电路。多个信号在一个 always,容易按软件思维
来进行FPGA 设计。
一个 always 设计 1 个信号好处多多,而代价仅仅是多写几行代码而已。明德扬的
老师,全都是按这个规范进行设计,代码只需要做少量的边界调整就完成设计,简单
和高效。请同学们也按照这个规范来设计。
5.6.2 1 个信号1 个always
这个问题很好理解,请看下图
1 ‘b0 SET b
D Q
CLR Q
1 ‘b 1 SET b
D Q
CLR Q
上图第 1 个触发器的输出值为 0 ,第2 个触发器的输出值为 1 ,由于两个触发
文档评论(0)