VORC的PE仿真问题之二:reg数据类型和寄存器
来源:互联网 发布:mac迅雷下种子失败 编辑:程序博客网 时间:2024/04/25 21:53
VORC - Register模块仿真
仿真环境: ModelSim 6.2
源代码: Veriolog
问题:reg3、reg4、reg5等均为不定值,而在测试代码中初始化赋值为0。
原因:从电路图中看,reg3是一个关键,它的值不确定,会导致接下来的多路选择器和加法器的输入数据不确定,这样在仿真时,就会出现大量的不确定值。为什么对reg 3赋初值为0,而在仿真波形中出现不定值x呢?推测原因是:reg3仅仅是定义的一个数据类型,而电路途中的REG3是一个实际的寄存器。
解决方法:为REG3编写RTL代码,并在VORC中例化。
图一 VORC的MAC(乘加运算功能)仿真波形(出错)
1、寄存器的RTL代码
VORC - Register模块带有使能信号但没有复位信号,而且该代码是可综合的。
Source code :
'timescale 1ns/1ns
module register_4 (clk, start, d, q);
input clk, start;
input [3:0] d;
output [3:0] q;
reg [3:0] q;
always @ (posedge clk)
if (start)
q <= d;
else
q <= 0;
endmodule
Testbench :
'timescale 1ns/1ns
module register_4_tb; // (clk, start, d, q);
reg clk;
reg start;
reg [3:0] d;
wire [3:0] q;
register_4 dut (clk, start, d, q);
initial
clk = 1;
always
#10 clk = ~ clk;
initial
begin
d = 0;
start = 1;
end
always
#10 d = d + 1;
endmodule
ModelSim仿真波形:
图二 带使能的4位寄存器仿真波形
2、在VORC源代码中例化上面的寄存器,并仿真,其结果正确。
图三 VORC乘加运算功能仿真波形
寄存器数据类型
寄存器是数据存储单元的抽象。
寄存器数据类型的关键字是reg。
通过赋值语句可以改变寄存器存储的值,其作用与改变触发器存储的值相当。在Verilog中有多种结构可以用于控制何时或是否执行赋值语句。这些控制结构可以用来描述硬件触发器的各种状态,如时钟的上升沿(posedge clk),或者用于描述判断逻辑的细节,如各种多路选择器。
Reg类型数据的默认初始值为不定值 X,可以赋正值或负值,但作为表达式中的操作数是,会将负值作为无符号数。
Reg 类型数据常用来表示"always"块内的指定信号,常代表触发器。通常,在设计中要由"always"块通过使用行为描述语句来表达逻辑关系。在"always"块内被赋值的每一个信号都必须定义为reg类型。
Reg数据类型的定义格式:reg [size-1:0] reg1, reg2,reg3;
Reg类型数据只表示被定义的信号将用在"always"块内。但reg类型的信号不一定是寄存器或触发器的输出。(设计中用到的寄存器要定义成相应的模块,而不能只是定义为reg类型)。
数据在寄存器中暂存
组合逻辑电路的输出与每一个输入信号的电平直接相关。严格来讲,它的输出在每一个瞬间都又可以发生变化,而同步时序逻辑电路的输出只在时钟跳变沿发生变化(always @ (posedge clk))。
由于实际的逻辑门和连线均存在延迟,实际的组合逻辑电路瞬间的输出值的不确定性是不可避免的。因此,为了获得稳定的输出值,要使组合逻辑电路的输入值稳定足够的时间。现实的方法是将数据暂存到寄存器中,这样数据就可以按照时钟节拍为下一级组合逻辑电路提供稳定的输入信号。
- VORC的PE仿真问题之二:reg数据类型和寄存器
- VORC的PE仿真问题之一:乘法器延迟
- VORC的PE仿真问题之三:符号判断位选择错误导致电路死锁
- Verilog中wire和reg数据类型的区别
- Verilog中wire和reg数据类型的区别
- Verilog 中 wire 和 reg 数据类型区别
- 访问pe-reg
- 寄存器,verilog 中 reg
- 仿真WINDOWS PE加载器的程序
- 仿真WINDOWS PE加载器的程序
- 仿真WINDOWS PE加载器的程序
- 仿真WINDOWS PE加载器的程序
- 仿真代码之二
- wire和reg的区别
- MDK5.14仿真STM32F303时无法查看外设寄存器的问题
- TI DSP外设寄存器和CPU控制寄存器、数据类型、中断的使用
- oracle学习之二(数据类型和表的查询)
- Verilog中reg和wire数据类型的确定
- OWCWebChart
- 知识整理很重要
- 第五章 控制代码的流程
- JSTL配置
- mysql的安装,与php、Apache相结合
- VORC的PE仿真问题之二:reg数据类型和寄存器
- 从兽首事件看我们自己缺什么
- Framework之外的IoC
- Base64编码、解码
- 对电子商务的看法
- B/S开发模式简介和与C/S模式的比较
- Hibernate Annotation几种关联映射
- 电子元件矢量图软件
- asp实现关键词不区分大小写搜索并高亮显示