Verilog HDL
要制作CPU,我没有选择使用分立元件构造,我选择使用了使用FPGA+代码的方式来实现。所以要学习Verilog HDL语言。这是一种HDL(硬件描述语言),可以进行抽象度很高的RTL电路设计。
设计电路的步骤

电路描述
Verilog HDL使用模块来设计一个功能单位的逻辑,模块是Verilog HDL中最基本的构成单位。
模块的声明
模块声明语法:
module<module name>{
<输入信号定义>
<输入信号定义>
...
};
<电路描述>
endmodule
比如使用模块来描述一个32位的加法器
module adder{
input wire [31:0] in_0, //输入0
input wire [31:0] in_1, //输入1
output wire [31:0] out //输出
};
assign out = in_0 + in_1; //将in_0和in_1相加结果代入out中
endmodule
模块的实例化
模块的实例化语法:
<模块名> <实例名>(
.<相连的端口名>(相连的信号名),
.<相连的端口名>(相连的信号名),
...
);
adder adder01(
.in_0 (adder01_in_0), //adder01_in_0信号连接到in_0端口
.in_1 (adder01_in_1), //adder01_in_1信号连接到in_1端口
.out (adder01_out)
);
逻辑值和常数表达
逻辑值表达:

常数表达:

变量的声明与数据类型
变量声明

数据类型和变量名是必要项目,其他项可以省略。符号和位宽如果省略则根据数据类型设置为默认值,元素数省略默认声明元素数为1的变量。
数据类型
数据类型有寄存器型和网络型两种。寄存器类型是可以保存上次写入数据的数据类型,根据程序的不同可以生成锁存器、触发器等存储元件,也可能生成组合电路。
寄存器型变量

寄存器型变量会在always和initial语句中实现过程赋值。过程赋值分为阻塞式和非阻塞式赋值两种。
阻塞式赋值:按照代码顺序进行赋值的方式。在先赋值的代码赋值完成之前阻塞后续代码的赋值,因此得名阻塞式赋值。使用=
非阻塞赋值:所有代码不会相互阻塞,同时进行赋值。使用<=
在一个过程块中,两种方式只能使用其中一种

网络型变量
网络型是用来描述模块和寄存器间连接的数据类型。网络型只描述信号的传递不持有数据。

本文介绍使用VerilogHDL设计CPU的方法,包括模块声明、实例化、过程赋值等内容,并提供寄存器堆设计实例及仿真测试案例。
最低0.47元/天 解锁文章
1328

被折叠的 条评论
为什么被折叠?



