always块中的REG型变量会被综合成什么结构
创作时间:
作者:
@小白创作中心
always块中的REG型变量会被综合成什么结构
引用
CSDN
1.
https://blog.csdn.net/qq_43433724/article/details/138185404
在Verilog HDL编程中,always块中的变量在声明时都必须为reg类型。但是,对于组合逻辑和时序逻辑,综合器会将二者综合成不同的结构。下面通过实际例子进行分析。
组合逻辑与时序逻辑的综合结果
考虑以下Verilog模块:
module full_add(
input clk,
input [3:0]a,
input [3:0]b,
output [7:0]c,
output [3:0] d
);
reg [3:0]a_temp;
reg [3:0]b_temp;
always@(*)
begin
a_temp=a;
end
assign c=a_temp;
always@(posedge clk)
begin
b_temp<=b;
end
assign d=b_temp;
endmodule
在这个模块中,a_temp由组合逻辑产生,而b_temp由时序逻辑产生。下面是它们的综合结果:
从综合结果可以看出:
a_temp被综合为wire型。b_temp被综合为触发器。
因此,即使在声明时都被声明为寄存器,但根据其是组合逻辑还是时序逻辑,最终的综合结果是不同的。
不完整赋值情况下的综合结果
再考虑以下情况:
module full_add(
input en,
input [3:0]a,
input [3:0]b,
output [3:0]c,
output [3:0]d
);
reg [3:0]a_temp;
reg [3:0]b_temp;
always@(*)
begin
if(en)
a_temp<=a;
end
assign c=a_temp;
always@(*)
begin
if(en)
b_temp<=b;
else
b_temp<=0;
end
assign d=b_temp;
endmodule
在这个模块中:
- 对于未完整赋值的情况(如
a_temp),reg会被综合成锁存器。 - 对于完整赋值的情况(如
b_temp),reg会被综合为wire连线。
总结
- 在描述组合逻辑的always块中,寄存器被综合成wire型;如果存在不完整的赋值的情况,则被综合成锁存器。
- 在描述时序逻辑的always块中,寄存器则根据语句块的内容被综合成触发器。
热门推荐
高考成绩公布,如何应对情绪大起大落?
2019高考生必看:依分择校五步法
搞笑视频真的能治愈心情吗?
深秋探秘:大连旅顺白玉山的历史与美食
大连必打卡!你去过几个?
看脸账号火爆,颜值评分引热议
华晨宇整容疑云:揭秘娱乐圈颜值评分背后的故事
《青春有你》背后的颜值心理学:从进化论到社会现实
职场暗恋攻略:如何在保持专业的同时巧妙靠近
乌鲁木齐火车站北广场:市区畅游攻略
乌鲁木齐火车站公交线路大调整:南北广场整合,末班车延至00:30
免疫力好坏,并非都是天生!营养科专家:后天还可这么补
带你了解奇楠的形成
炉石传说上分攻略:十大实用技巧助你冲击传说段位
乌克兰大饥荒:苏联农业集体化政策的惨痛代价
止泻的中药有哪些?
我国第二大癌症有国产新药上市——恩立妥®打破近20年进口垄断
“喜欢”和“爱”的区别,在这5个方面表现得淋漓尽致,你懂吗?
桃花运的浪漫起源与文化意蕴
春季腹泻高发!这份防治指南请收好
乌鲁木齐火车站交通指南:一站搞定!
乌鲁木齐火车南站:一座车站的60年变迁史
大二下半学期如何达到数据科学与大数据技术专业实习要求
师范生教育实习:如何成为优秀教师?
教育实习总结写作指导:从内容到结构的全面解析
春顿实习教你高效完成实习任务!
大二下半学期:锁定大厂暑期实习!
吉他琴颈弯曲?这份科学降压与维护指南请收好
Niko老师教你调节琴颈,告别弯颈烦恼!
科学探索生命轮回:多学科研究开启新视角