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块中,寄存器则根据语句块的内容被综合成触发器。
热门推荐
2024年海外留学十大趋势:高净值人群子女教育新动向
太岁在传统文化与现代生活中的多重意义与影响探讨
“卡牌盲盒”亟需亮剑整治
伊丽莎白一世的历史地位与影响研究
宋朝文官制度的治理
白墙脏了怎么办?教你6个妙招,轻松去除白墙污渍,省钱又实用
双子座性格全解析:好奇心与活力并存的矛盾体
五行起名字的原则
高中分文理科?选科指南:解锁你的未来之路
那个年代的供销社,老照片里的旧时光
点击冒险之旅开局攻略是什么
日本六代机亮相,气动布局神似歼20
最吉的神——天乙贵人及其影响
危险驾驶现象深度分析:原因、危害与应对策略
莫尔斯玫瑰线(Morse Rose Curves)介绍
压力性紫癜:是否需要治疗?
能否实现零污染?新能源车退役电池回收灵魂5问,乱象亟待破解?
入团申请书2024最新版,搜罗分享经典模板
减肥晚上可以吃西兰花吗
潘新和:语文“为什么教”,实关人“为什么活”
眼袋肿了热敷还是冷敷
亚麻衣服怎么洗涤和保养方法
家庭育儿新视角:化解妈妈焦虑的策略与智慧
医学与法律中的DNA鉴定:不可或缺的工具
东北菜十大经典名菜,谁才是你心中的NO.1?不是锅包肉,而是它?
从收藏展示到教育研究——北京推动馆校融合打造“大学校”
埃及神话人物——诸神的传奇与宇宙的秩序
传统美术:中国手指书画
南瓜花蛤菜稀饭/南瓜粥
高盛重大预警,超级大佬发声!美股即将面临回调?