第16周实验-用Verilog设计1个单周期8位CPU_模拟8051主要功能和部份指令

本文介绍了如何使用Verilog设计一个单周期8位CPU,模仿8051的功能,并通过Proteus模拟LED流水灯电路。作者还展示了C语言和51汇编语言的应用,以及下一步计划模拟8051指令集的部分翻译过程。
摘要由CSDN通过智能技术生成

第16周实验-用Verilog设计1个单周期8位CPU_模拟8051主要功能和部份指令

实验要求:

一. 基础准备。阅读参考附件1,了解用Logisim(或Logisim Revolution、LogicCircuit)从低层门电路开始、逐步设计手工画电路实现一个简单自定义的简单8位CPU的方法和过程。试着改用Verilog 编程设计一个 简单周期CPU框架,能够仿真运行若干类 简单的加减法、逻辑运算、跳转指令等指令,学习借助网上资料,可参考附件2。提交完成的Verilog项目代码和最终项目截图。

module PCadd4(PC_o,PCadd4);
input [31:0] PC_o;//偏移量
output [31:0] PCadd4;//新指令地址
CLA_32 cla32(PC_o,4,0, PCadd4, Cout);
endmodule
module CLA_32(X, Y, Cin, S, Cout);
input [31:0] X, Y; 
input Cin;   
output [31:0] S;
output Cout;
wire Cout0, Cout1, Cout2, Cout3, Cout4, Cout5, Cout6;    
CLA_4 add0 (X[3:0], Y[3:0], Cin, S[3:0], Cout0);
CLA_4 add1 (X[7:4], Y[7:4], Cout0, S[7:4], Cout1);
CLA_4 add2 (X[11:8], Y[11:8], Cout1, S[11:8], Cout2);
CLA_4 add3 (X[15:12], Y[15:12], Cout2, S[15:12], Cout3);
CLA_4 add4 (X[19:16], Y[19:16], Cout3, S[19:16], Cout4);
CLA_4 add5 (X[23:20], Y[23:20], Cout4, S[23:20], Cout5);
CLA_4 add6 (X[27:24], Y[27:24], Cout5, S[27:24], Cout6);
CLA_4 add7 (X[31:28], Y[31:28], Cout6, S[31:28], Cout);
Endmodule
module CLA_4(X, Y, Cin, S, Cout);
input [3:0] X;
input [3:0] Y;
input Cin;
output [3:0] S;
output Cout;
and get_0_0_0(tmp_0_0_0, X[0], Y[0]);
or get_0_0_1(tmp_0_0_1, X[0], Y[0]);
and get_0_1_0(tmp_0_1_0, X[1], Y[1]);
or get_0_1_1(tmp_0_1_1, X[1], Y[1]);
and get_0_2_0(tmp_0_2_0, X[2], Y[2]);
or get_0_2_1(tmp_0_2_1, X[2], Y[2]);
and get_0_3_0(tmp_0_3_0, X[3], Y[3]);
or get_0_3_1(tmp_0_3_1, X[3], Y[3]);
and get_1_0_0(tmp_1_0_0, ~tmp_0_0_0, tmp_0_0_1);
assign S = {S3,S2,S1,S0};
endmodule

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二. 了解8051单片机。安装Proteus8软件,设计一个LED流水灯电路,分别用C语言和 51汇编语言编程,实现流水灯正常工作。并解释电路原理图设计、代码设计的工作原理。提交任务时须提交Proteus电路和Keil 源码、可执行Hex文件。 思考下一步你打算模拟实现哪部分8051指令集(以要测试的简单小程序汇编代码依据),将小汇编程序逐条语句手工地翻译为二进制程序数据。

1、安装Proteus电路仿真软件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

首先我们创建一个新工程,分别由三个窗口:源代码窗口、PCB窗口、原理图窗口

创建一个新的工程并编写main.c文件:

	#include <reg51.h>
	#include <intrins.h>
	//延迟函数
	void delay_ms(int a)
	{
		int i,j;
		for(i=0;i<a;i++)
		{
			for(j=0;j<1000;j++) _nop_();
	
		}
	}
	
	void main(void)
	{
		while(1)
		{
			P0=0xfe;
			delay_ms(50);
			P0=0xfd;
			delay_ms(50);
			P0=0xfb;
			delay_ms(50);
			P0=0xf7;
			delay_ms(50);
			P0=0xef;
			delay_ms(50);
			P0=0xdf;
			delay_ms(50);
			P0=0xbf;
			delay_ms(50);
			P0=0x7f;
			delay_ms(50);
		}
	}```

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值