自制CPU第二篇:Verilog HDL

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

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语句中实现过程赋值。过程赋值分为阻塞式和非阻塞式赋值两种。

阻塞式赋值:按照代码顺序进行赋值的方式。在先赋值的代码赋值完成之前阻塞后续代码的赋值,因此得名阻塞式赋值。使用=

非阻塞赋值:所有代码不会相互阻塞,同时进行赋值。使用<=

在一个过程块中,两种方式只能使用其中一种
在这里插入图片描述

网络型变量

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值