在这个项目中 Verilog代码 为一个 微控制器 被呈现。在实施之前,本部分介绍了微控制器的指令集架构。 (Part-2 和 Part-3)
指令集架构:
每个指令为12位。编码有3种类型的指令,如下所示:
- M型 :一个操作数是累加器(有时被忽略),另一个操作数来自数据存储器;结果可以存储到累加器或数据存储器条目(与第二个操作数相同的条目)中。
- 我输入: 一个操作数是累加器,另一个操作数是在指令中编码的立即数;结果存储到累加器中。
- S型: 特殊指令,不需要操作数。 (例如,NOP)
指令编码空间如下表所示。
代码空间
(二进制)
|
代码空间
(十六进制)
|
类型
|
指令数
|
注意
|
0000_0000_0000-0000_1111_1111
|
000-0FF
|
特别说明 (S type)
|
256
|
目前只有NOP
已使用,255个空闲插槽
|
0001_0000_0000-0001_1111_1111
|
100-1FF
|
无条件跳
(我输入)
|
1
|
去
|
0010_0000_0000-0011_1111_1111
|
200-3FF
|
ALU说明
(M型)
|
32
|
16条指令,2个目的地选择
|
0100_0000_0000-0111_1111_1111
|
400-7FF
|
有条件的跳跃
(我输入)
|
4
|
JZ,JC,JS,JC
|
1000_0000_0000-1111_1111_1111
|
800-FFF
|
ALU说明
(我输入)
|
8
|
目前已使用7次,免费1次
插槽
|
这些指令可以按功能分为4类。
1. ALU指令:使用ALU计算结果;
2.无条件分支:GOTO指令;
3.条件分支:JZ,JC,JS,JO指令;
4.特殊说明:NOP。
M型指示
M型指令的一般格式如下所示。
下表包含每个M类型指令的详细信息。注意“aaaa”编码数据存储器的4位地址,并且“d”该位表示结果的目的地,即如果d = 1,则将结果写入Acc,否则将结果写入与操作数相同的存储位置
注意所有的M类型指令都是ALU指令。
评论:
1.对于循环移位,仅旋转存储器条目中的操作数,即不涉及标志。例如,如果8’b1000_0000左移循环1位,变为8’b0000_0001,并且不影响任何标志。
2.对于逻辑移位指令,总是填充0,并且C标志设置为移出的最后一位。例如,如果8’b1000_0000逻辑左移1位,变为8’b0000_0000,并且C =1。另一个示例,如果8’b0000_0100逻辑右移3位,变为8’b0000_0000,并且C =1。如果没有移出任何位,则Z标志和C标志不受影响。
3.对于算术右移指令,将填充MSB,并将C标志设置为移出的最后一位。例如,如果8’b1000_0001算术右移1位,变为8’b1100_0000,并且C =1。另一个示例,如果8’b0000_0100算术右移3位,变为8’b0000_0000,并且C =1。如果没有移出任何位,则Z标志和C标志不受影响。
我输入指令
M型指令的一般格式如下所示。
下表包含每个M类型指令的详细信息。
请注意,我键入的指令包含无条件分支,条件分支和ALU指令。
S型说明
S型指令的一般格式如下所示。
只有一种S类型指令,即NOP指令。
样品测试程序 |
完成MCU的硬件实现后,您需要编写测试平台并加载指令以通过仿真验证设计。以下是一些验证MCU的测试程序。
Test1:程序加载,累加器和内存加载,GOTO
Test2:加减法(M型)
Test3:逻辑运算(M型)
Test4:加,减,逻辑运算(I型)
第3部分将是整个微控制器的Verilog代码。
29。 复用器的Verilog代码
您可能会这样:
VHDL中的完整8位微控制器
Verilog中的单周期MIPS处理器
用于16位RISC处理器的Verilog代码
Verilog中的32位5级流水线MIPS处理器(第1部分)
Verilog中的32位5级流水线MIPS处理器(第2部分)
Verilog中的32位5级流水线MIPS处理器(第3部分)
什么是FPGA编程? FPGA与软件编程
面向学生的推荐且价格合理的Xilinx FPGA板
面向学生的推荐且价格合理的Altera FPGA板
推荐的 Verilog projects:
VHDL中的完整8位微控制器
Verilog中的单周期MIPS处理器
用于16位RISC处理器的Verilog代码
Verilog中的32位5级流水线MIPS处理器(第1部分)
Verilog中的32位5级流水线MIPS处理器(第2部分)
Verilog中的32位5级流水线MIPS处理器(第3部分)
什么是FPGA编程? FPGA与软件编程
面向学生的推荐且价格合理的Xilinx FPGA板
面向学生的推荐且价格合理的Altera FPGA板
推荐的 Verilog projects:
2. FIFO存储器的Verilog代码
3. 用于16位单周期MIPS处理器的Verilog代码
4. Verilog HDL中的可编程数字延迟计时器
5. 用于数字电路中基本逻辑组件的Verilog代码
6. 用于32位无符号除法器的Verilog代码
7. 用于定点矩阵乘法的Verilog代码
8. Verilog HDL中的车牌许可证识别
9. 提前进位乘法器的Verilog代码
10。 微处理器的Verilog代码
11。 4x4乘法器的Verilog代码
12 停车场系统的Verilog代码
13 使用Verilog HDL在FPGA上进行图像处理
14。 如何使用Verilog HDL将文本文件加载到FPGA中
15 交通信号灯控制器的Verilog代码
16。 FPGA上的闹钟的Verilog代码
17。 比较器设计的Verilog代码
18岁 D触发器的Verilog代码
19 Full Adder的Verilog代码
20 带testbench的计数器的Verilog代码
21 16位RISC处理器的Verilog代码
22 用于在FPGA上反跳按钮的Verilog代码
23。 如何为双向/输入端口编写Verilog Testbench
3. 用于16位单周期MIPS处理器的Verilog代码
4. Verilog HDL中的可编程数字延迟计时器
5. 用于数字电路中基本逻辑组件的Verilog代码
6. 用于32位无符号除法器的Verilog代码
7. 用于定点矩阵乘法的Verilog代码
8. Verilog HDL中的车牌许可证识别
9. 提前进位乘法器的Verilog代码
10。 微处理器的Verilog代码
11。 4x4乘法器的Verilog代码
12 停车场系统的Verilog代码
13 使用Verilog HDL在FPGA上进行图像处理
14。 如何使用Verilog HDL将文本文件加载到FPGA中
15 交通信号灯控制器的Verilog代码
16。 FPGA上的闹钟的Verilog代码
17。 比较器设计的Verilog代码
18岁 D触发器的Verilog代码
19 Full Adder的Verilog代码
20 带testbench的计数器的Verilog代码
21 16位RISC处理器的Verilog代码
22 用于在FPGA上反跳按钮的Verilog代码
23。 如何为双向/输入端口编写Verilog Testbench
24 Verilog和LogiSim中的Tic Tac Toe游戏
25岁 Verilog中的32位5级流水线MIPS处理器(第1部分)
26 Verilog中的32位5级流水线MIPS处理器(第2部分)
27。 Verilog中的32位5级流水线MIPS处理器(第3部分)
28。 解码器的Verilog代码25岁 Verilog中的32位5级流水线MIPS处理器(第1部分)
26 Verilog中的32位5级流水线MIPS处理器(第2部分)
27。 Verilog中的32位5级流水线MIPS处理器(第3部分)
29。 复用器的Verilog代码
30岁 Verilog中的N位加法器设计
30岁 Verilog中的N位加法器设计
31。 Verilog和VHDL :通过示例解释
32。 FPGA上时钟分频器的Verilog代码
33。 如何在Verilog中生成时钟使能信号
34。 用于PWM发生器的Verilog代码
35岁 Verilog编码与软件编程
36。 使用Moore FSM的序列检测器的Verilog代码
30岁 Verilog中的N位加法器设计
31。 Verilog和VHDL :通过示例解释
32。 FPGA上时钟分频器的Verilog代码
33。 如何在Verilog中生成时钟使能信号
34。 用于PWM发生器的Verilog代码
35岁 Verilog编码与软件编程
36。 使用Moore FSM的序列检测器的Verilog代码
没意见:
发表评论