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块中,寄存器则根据语句块的内容被综合成触发器。
热门推荐
如何有效利用IB课程英语自学网站提升英语能力
每周超6亿美元代币解锁:价格压力与市场影响全解析
中医如何治疗牛皮癣?
瓷砖划痕处理小妙招(瓷砖刮花了有什么办法补救)
受争议的“瑶一瑶小肉包”,需正确关注的网红儿童
电机控制技术未来发展:创新突破与挑战共存
戴尔电脑开机提示F1、F2、F5怎么办?三种可能原因及解决方案
为什么氧化镁可以促进叶绿素的合成
粽子新鲜与否就看粽叶翠绿的程度?这可不以一定哦!
中国历朝历代各多少年
如何判断基金是否被高估或低估?
外地户口拆迁补偿指南:补偿标准与注意事项
如何给产品提需求邮件
战国四公子:各具成就的英才
战国四大公子:春申君、信陵君、孟尝君、平原君
法律责任的签字确认:条件与流程
阳光下的桂花(桂花喜欢阳光吗?探究桂花的光照需求)
咯吱咯吱...老磨牙是怎么回事?
日本人的祖先是谁?有三种说法,有一种最靠谱
运动吃什么补充体力?8种食物加快身体恢复!
自制猫窝的方法 猫窝买什么样的比较好?
武汉80家A股上市公司半年报出炉:近八成盈利,三分之一企业研发投入增超10%
AI如何改变医疗?从精准诊断到个性化治疗,智能医疗时代来临!
SSL/TLS 握手:关键步骤和重要性说明
微波炉、空气炸锅、烤箱哪个实用?一文详解三种厨房电器的优劣
云南普洱旅游攻略
豐臣秀吉的性格如何?他的生涯與晚年、名言、死因等
平躺打呼噜侧卧不打呼噜怎么治疗
石油储罐安全附件维护保养方法
煎茶的全攻略:不可或缺的茶具清单,让你泡出一杯完美的茶