信号命名和定义应该明确

在设计中,我们不断的给目录、源代码、文件、函数、变量、参数、类、封包进行命名与定义。当一件工作需要进行的次数非常之多,足以证明它是不可或缺的基本工作。我们一定要知道一点,基础工作是整个项目的基石。忽视抑或是轻视基础工作是一件非常错误的工作理念。我们需要用最严谨认真的态度去对待,同时作为回报,它将令你的作品显得专业而优雅。
我们以信号的定义为例来说明这个问题。先来看这么一组代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
4344
45
464748
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= 0;
end
else if(add_cnt)begin
if(end_cnt)
cnt <= 0;
else
cnt <= cnt + 1;
end
end
assign add_cnt = flag1||flag2 ;
assign end_cnt = add_cnt && cnt==x-1 ;
always@(posedge clk or negedgerst_n)begin
if(rst_n==1'b0)begin
flag1 <= 1'b0;
end
else if(en1)begin
flag1 <= 1'b1;
end
else if(end_cnt)begin
flag1 <= 1'b0;
end
end
always@(posedge clk or negedgerst_n)begin
if(rst_n==1'b0)begin
flag2 <= 1'b1;
end
else if(en2)begin
flag2 <= 1'b1;
end
else if(end_cnt)begin
flag2 <= 1'b0;
end
end
always@(*)begin
if(flag1)
x = 5;
else if(flag2)
x = 7;
else begin
x = 0;
end
end
这组代码的功能是当en1时计数5下;en2计数7下。在这组代码中,en1时flag1拉高;end-cnt时flag1变低;en2时flag2拉高;end-cnt时flag2变低;也就是在flag1或者flag2时加一,然后用flag1和flag2分别区分计数5下和7下。
尽管能够实现功能,但是在这组代码中,存在信号定义不明确得现象。 flag1和flag2到底是什么意思?是表示flag1(flag2)时en1产生,还是en1(en2)时的计数状态?为说明这一点就得用到xxxxx (写加一条件时需要用到add_cnt = flag1||flag2)语句。
这里重申一下我们很重要的那条简单原则,一个代码(信号)只做一件事且做好这件事!按照这个规则,思路就是这样了:用一个信号flag1来表示计数状态,另外一个信号flag2表示是由en1还是en2所产生。那么,加一与否的条件非常简单,就是是否处于工作状态(flag1);同理,计数5或者7下只需要使用flag2一个信号。那么代码就会是这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
3839
404142
43
44
45
always @(posedge clkor negedge rst_n)begin
if(!rst_n)begin
cnt <= 0;
end
else if(add_cnt)begin
if(end_cnt)
cnt <= 0;
else
cnt <= cnt + 1;
end
end
assign add_cnt =flag1 ;
assign end_cnt =add_cnt && cnt==x-1 ;
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
flag1 <= 1'b0;
end
else if(en1||en2 )begin
flag1 <= 1'b1;
end
else if(end_cnt)begin
flag1 <= 1'b0;
end
end
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
flag2 <= 1'b1;
end
else if(en1)begin
flag2 <= 1'b0;
end
else if(en2)begin
flag2 <= 1'b1;
end
end
always@(*)begin
if(flag==0)
x = 5;
else
x = 7;
end
从中可以看出,优秀的fpga设计师一开始就从顶层结构明确定义信号,将可能出现的混乱从根源上解决。这样的思路和方法实在非常值得我们每一位从业者学习和借鉴。
fpga整洁的代码3.pdf7天前 上传
下载次数: 0
下载积分: 积分 -1
328.05 kb, 下载次数: 0, 下载积分: 积分 -1

高光谱成像技术如何进行地物识别?
关于几种射频同轴电缆的简单介绍
瑞萨电子推出用于工业以太网(IE)通信的R-IN32M4-CL3 IC
“智在芯中,有龙则灵”Qualcomm DragonBoard公开课北京站纪实
突破办公地点局限,Cadence Hosted解决方案为初创
信号命名和定义应该明确
美国国防部降低核武使用门槛_中国是这样回应的
通过构建数据集中的电子病历,及时监控疾病并扼杀于萌芽
人工智能带来的五个奇点详解(规范/经典理论/经济/社会形态/技术)
物联网卡扮演着什么样的角色
SIM卡密码要怎么设置?
大功率LED灯驱动电源的技术方案和功能模组
低压差线性芯片H7310特性介绍 2.5-100V 集成电路IC ESOP-8 LED矿灯专用
东莞显同电子教你处理LED显示屏黑屏
3D封装竞赛愈演愈烈
基于PPS组装的锂金属电池具有优异的循环稳定性和安全性
有什么便宜的国产蓝牙耳机?盘点四款便宜好用的国产蓝牙
小米折叠屏手机设计图疑似曝光
Spansion荣获中兴通讯两项大奖
光照培养箱的运作模式及维护方式的说明