计算机组成原理课设论文

更新时间:2024-05-28 08:51:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机组成原理课程设计

题 目:学 院:专 业:姓 名:学 号:指导教师: 计算机原理课程设计 计算机科学与工程学院 计算机科学与技术 孤狼 1100310315

2014年03月 20

目录

一.课程设计选题和完成内容 .................................................................................................................. 2 二、系统的总体设计 ............................................................................................................................... 2

2.1 嵌入式CISC模型机的数据通路框图 ..................................................................................... 2 2.2 系统的操作控制器的逻辑框图 ................................................................................................ 2 2.3模型机的指令格式 ..................................................................................................................... 3 2.4编写汇编源程序 ......................................................................................................................... 5 2.5最终机器码……………………………………………………………………..........................5 三、时序产生器…………………………………………………………………………………………5 四、 微程序控制器的设计 ..................................................................................................................... 6

4.1设计微指令流程图 .................................................................................................................... 6 4.2 设计微指令格式和微指令代码表 ............................................................................................ 8 4.3设计地址转移逻辑电路 ........................................................................................................... 10 五、单元电路设计 ................................................................................................................................. 10

5.1模型机顶层电路设计…………………………………………………………………...…….11 5.2模型机crom单元电路设计……………………………………………………………..…….12 六、设计过程所遇到的问题及解决记录 136.1JNS

转……………………………………………………………………..13

6.2 STO( STO R2 (R0) )存储位置每次都为00H…………………………………………..13 七、测试及结果分析 ............................................................................................. 错误!未定义书签。 八、心得体会总结 ................................................................................................................................. 16 九、附录 ................................................................................................................................................. 16 各个单元的电路设计或VHDL源文件

1

一.课程设计选题和完成内容

选题:本设计选择题目为A类第一题

题目:设计一台嵌入式CISC模型计算机

采用定长CPU周期、联合控制方式,并运行能完成一定功能的机器语言源程序进行验证,机器语言源程序功能如下: A类(最高成绩为“优”):

●输入包含5个整数(有符号数)的数组M,输出所有负数的平方和。(非卓越班) ●输入包含5个整数(有符号数)的数组M,输出最大负数的绝对值。(非卓越班) ●输入包含10个整数(无符号数)的数组M,输出众数(出现次数最多的数)及其出现的次数。(卓越班)

●输入包含10个整数(无符号数)的数组M,输出中位数。(卓越班)

说明:A类题目的嵌入式模型计算机内必须设计和使用RAM存储器读写数据,相应地需要设计对RAM存储器数据的读写指令,以及对RAM中数组操作必须的寄存器间接寻址方式等。 B类(最高成绩为“良”):

●输入5个整数(有符号数),输出所有负数的平方和。(非卓越班) ●输入5个整数(有符号数),输出最大负数的绝对值。(非卓越班)

●输入5个整数(有符号数),输出它们的平均值,以及小于此平均值的数的个数。(卓越班)

要完成的内容:

1.完成系统的总体设计,画出模型机数据通路框图; 2.设计微程序控制器(CISC模型计算机)的逻辑结构框图; 3.设计机器指令格式和指令系统; 4.设计时序产生器电路;

5.设计所有机器指令的微程序流程图; 6.设计操作

7.的所有单元电路,并用VHDL语言(也可使用GDF文件--图形描述文件) 8. 对模型机中控制器单元;

设计模型机的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路。 9.由给出的题目和设计的指令系统编写相应的汇编语言源程序;

9.根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计 到模型机中的 ROM中去;

10.使用EDA软件进行功能仿真,要保证其结果满足题目的要求;(其中要利用EDA软 件提供的波形编辑器,选择合适的输入输出信号及中间信号进行调试。)

2

二、系统的总体设计

2.1 嵌入式CISC模型机的数据通路框图

图2-1

2.2 系统的操作控制器的逻辑框图

3

2.3模型机的指令格式

这里,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。

此模型的系统共设计了共有10 条指令,分别为:IN,MOV,LAD,STO,INC,JNS, ADD,MUL, OUT,TEST。

2.3.1具体指令格式如下:

微地址 助记符号 000001 MOV Rd,im 000010 INT Rd 000011 STO Rs,(Rd) 000100 000101 000110 INC Rd DEC Rd TEST Rd 指令格式 15--12 11 10 9 8 0001 xx Rd 0010 xx Rd 0011 0100 0101 0110 0111 1000 1001 1010 1011 Rs xx xx xx xx Rs Rs Rs Rs Rd Rd Rd Rd xx Rd Rd Rd xx 指令功能 7 -----0 im 立即数im→Rd xx 将输入数据存到Rd寄存器 xx xx xx xx addr xx xx addr xx (Rs)--->((Rd))将Rs的内容存到Rd地址中 (Rd)+1→Rd锁存SF和ZF (Rd)-1→Rd锁存SF和ZF 测试 (Rd)是否为负,锁存SF 若不为负数,则addr→PC ((Rs))--->Rd 将Rs地址的内容读到Rd (Rs)*(Rd)-->Rd (Rs)+(Rd)-->Rd (Rs)→OUTBUS 000111 JNS addr 001000 LAD(Rs),Rd 001001 001010 001011

MUL Rs Rd ADD Rs,Rd OUT Rs 2.3.2对Rs和Rd的规定:

2.3.3

Rs或Rd 0 0 0 1 1 0 1 1 选定的寄存器 R0 R1 R2 R3 模型机规定数据的表示采用定点整数补码表示,单字长为8位,其

格式如下:

7 6 5 4 3 2 1 0 符号位 尾数

4

2.4编写汇编源程序

我们要实现的功能是对连续输入的5个数据并存储到RAM的连续的存储单元中,然后再从RAM中将这5个数据依次读取出来并作判断是否为数,将5个数中所有的负数其求平方和,并对其结果进行显示等功能,从而得到一个简单的复杂指令模型机所实现的功能和结果 //根据要求编写如下汇编源程序: MOV R0,00H ;数据存放在RAM中的地址 MOV R1,4H ;计数 从4H(4)开始,到-1时结束 L1: INT R2 ;输入一个数到R2 STO R2,(R0) ;将输入的数存放到RAM的(R0)地址 INC R0 ;RAM地址指针+1 DEC R1 ;计数-1 TEST R1 ;测试计数是否到达5次,(R1)是否为负数 JNS L1 ;根据SF符号标志的判断,若不为负数,则跳转 MOV R0 00H ;当5个数输入存储完成后,重新初始化RAM指针 MOV R1 4H ;重置计数

L2: LAD (R0) R2 ;将(R0)地址的数取出送到R2中 TEST R2 ;测试取出的数是否为负数 JNS L3 ;若不为负数,则跳转到L3 MUL R2,R2 ;若为负数,则求平方 ADD R2,R3 ;再求平方和,把结果送到R3 L3: INC R0 ;RAM地址+1 DEC R1 ;计数-1+ TST R1 ;测试计数是否到达5次,(R1)是否为负数 JNS L2 ;为正数,计数还不到5次,则跳转到L2 OUT R3 ;计数到达5次,则将最后结果输出

2.5 最终机器码为:

5

地址 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 助记符(汇编) MOV R0,00H MOV R1,4H L1:INT R2 STO R2,(R0) INC R0 DEC R1 TEST R1 JNS L1 MOV R0,00H MOV R1,4H L2:LAD(R0),R2 TEST R2 JNS L3 MUL R2,R2 ADD R2,R3 L3:INC R0 DEC R1 TEST R1 JNS L2 OUT R3 机器代码 作用 0001000000000000 数据存放在RAM中的地址00H开始 0001000100000100 计数 从4H(4)开始,到-1时结束 0010001000000000 输入一个数到R2 0011100000000000 将输入的数存放到RAM的(R0)地址 0100000000000000 RAM地址指针+1 0101000100000000 计数-1 0110000100000000 测试计数是否到达5次,(R1)是否为负数,锁存SF 0111000000000010 根据SF符号标志的判断,若不为负数,则跳转 0001000000000000 当5个数输入存储完成后,重新初始化RAM指针 0001000100000100 重置计数 1000001000000000 将(R0)地址的数取出送到R2中 0110001000000000 测试取出的数是否为负数,锁存SF 0111000000001111 若不为负数,则跳转到L3 1001101000000000 若为负数,则求平方 1010101100000000 再求平方和,把结果送到R3 0100000000000000 RAM地址+1 0101000100000000 计数-1+ (R1)是否为负数,锁存SF 0110000100000000 测试计数是否到达5次,0111000000001010 为正数,计数还不到5次,则跳转到L2 1011110000000000 计数到达5次,则将最后结果输出 三.时序产生器

T1、T2、T3、T4与CLR、Q之间的关系图如下:

6

四.微程序控制器的设计

微程序控制器的设计过程包括:

(1)根据微处理器结构图、指令格式和功能设计所有机器指令的微程序流程图,并确定每

条微指令的微地址和后继微地址; (2)设计微指令格式和微指令代码表; (3)设计地址转移逻辑电路;

(4)设计微程序控制器中的其它逻辑单元电路,包括微地址寄存器、微命令寄存器和控制 存储器;

(5)设计微程序控制器的顶层电路(由多个模块组成)。

4.1设计微指令流程图

根据微处理器结构图、指令格式和功能设计所有机器指令的微程序流程图,并确定每条微指令的微地址和后继微地址;

7

00 PC->ABUS( I ) , RD ROM IBUS->IR ,PC +1 P(1 ) MOV INT STO INC DEC TEST JNS LAD MUL ADD OUT 01 02 03 04 05 06 07 08 09 0A 0B ROM->BUS SW->Rd Rd->AR Rd-->Y Rs->X IR(A) Rs->X Rs->AR Rd-->Y 测试Rd BUS->PC Y+1->Rd Rd->Y -->Rd Rd->Y Y+1->Rd 的最高 锁存SF,X+Y ->Rd X*Y->Rd 锁存SF,位,锁存ZF 0E ZF ZF 到 SF 中 0C 锁存 SF , 锁 , SF 00 00 00 Rs->DB RD RAM ZF 00 00 P(2) DBUS->Rd US WE 00 00 00 00 SF=1 SF=0 00 10 00 IR(A) -->Rd 00

8

4.2 设计微指令格式和微指令代码表

指令流程图设计完成后,开始设计微指令格式和微指令代码表,按照要求,CISC模型机系统使用的微指令采用全水平型微指令,字长为26位,其中微命令字段为18位,P字段为2位,后继微地址为6位,其格式如下:

按照此格式并根据设计的指令流程图,可以得到:

由微指令格式和微程序流程图编写的微指令代码表如下所示,在微指令的代码表中微命令字段从左边到右代表的微命令信号依次为:LOAD、LDPC、LDAR、LDIR、LDRi、LDPSW、RS_B、S2、S1、S0、ALU_B、SW_B、LED_B、RD_B、CS_B、RAM_B、CS_I、ADDR_B。

CLR LOAD LDPC 0 1 1 1 X 0 1 1 X 0 功能 将PC清0 BUS->PC 不装入,不计数 PC+1 S2 0 0 0 1 1 1 S1 0 1 1 1 0 1 S0 0 0 1 1 0 0 功能 X+Y,修改ZF,SF Y+1,修改ZF,SF Y-1,修改ZF,SF X*Y,修改ZF,SF 0&Y,修改ZF,SF ->Y

9

10

4.3设计地址转移逻辑电路

地址转移逻辑电路是根据微程序流程图中的棱形框部分及多个分支微地址,利用微地址寄存器的异步置“1”端,实现微地址的多路转移。地址转移逻辑电路中异步置“1”信号SE6~SE1表达式的确定与P字段测试时转移微地址的确定密切相关.

由于微地址寄存器中的触发器异步置“1”端低电平有效,与μA4~μA0对应的异步置“1”控制信号SE5~SE1的逻辑表达式为:(μA5的异步置“1”端SE6实际未使用)

SE6 <= '1';

SE5 <= NOT(NOT(SF) AND P2 AND T4); SE4 <= NOT(I4 AND P1 AND T4); SE3 <= NOT(I3 AND P1 AND T4); SE2 <= NOT(I2 AND P1 AND T4); SE1 <= NOT(I1 AND P1 AND T4);

五、单元电路设计

设计模型机中的所有单元电路,并用VHDL语言(也可使用GDF文件----图形描述文件)对模型机中的各个部件进行编程,并使之成为一个统一的整体,即形成顶层电路或顶层文件。具体设计方法见附录。

重点设计单元电路为:CR0M,ALU,ROM. CROM内部重点单元:COUNTROM,ADDR,MCOMMAND

11

5.1模型机(顶层)电路:

12

5.2模型机crom单元电路:

13

六.设计测试过程所遇到的问题及解决记录

6.1 JNS (JNS L2\\JNS L3)无法实现循环跳转

问题所在:没有认真注意到P测试的返回地址与指令IR->PC地址的关系,开始

时随便设置了IR->PC的地址

问题解决:后来了解到改地址与P(2)测试相关,改为010000后,跳转成功。

6.2 STO( STO R2 (R0) )存储位置每次都为00H

问题所在:STO指令中开启ADDR_B,关ALU_B,导致取地址来自于ROM内的机器码后八位addr,该机器码后八位为00H。

问题解决:微指令中关ADDR_B,开ALU_B,ALU设置直接输出Y,此时Y值来源于(R0),即为目的地址。

七、测试及结果分析

根据设计的汇编程序和对应的机器代码,对设计的模型机进行仿真测试,并分析结果:

7.1下图显示了RAM地址的初值设置00H,循环计数设置04H,第一个循环读入

40H至R2并存进RAM的过程。

14

7.2下图截取了其中3个循环,分别读进数40H,FCH,FEH.

7.3下图为5次循环后读进的5个数,如图从地址00H开始存放。

15

7.4下图为一次从RAM中读取负数,并计算平方并加到R3的过程

7.5下图为3个负数从RAM中读取判断,求得平方并求和的过程。 FC*FC+FE*FE+FF*FF=15H.

16

九、心得体会

通过课程设计的学习设计过程,我从对CISC模型机的组成和工作原理毫不了解,到慢慢的独立设计完成,并实现了预期功能。这次课程设计我学会Altera MAX+plus ⅡEDA软件的使用,熟悉了VHDL语言,并能使用其进行期间的编程,当然,也能用图形描述文件(.Gdf)进行顶层电路的设计。最终能用EDA软件设计一个能完成一定功能的模型计算机,并通过功能仿真和在EDA实验平台上运行一个程序来验证模型机设计的正确性。在设计的过程中,我了解了每个机器码,每个微指令的作用,懂得模型机的原理。

此次的课程设计让我收获的不单单有课程的知识,也学会了自主学习、学会了细心解决问题,培养了自己做事的耐心活认真的态度,培养了调试纠错的良好素养,更有的就是加强了自己的实践动手能力。

十、附录(VHDL源文件)

8.1ROM的设计(保存汇编源代码对应的机器码以及地址)

程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ROM IS PORT( DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CS_I:IN STD_LOGIC ); END ROM;

ARCHITECTURE A OF ROM IS BEGIN DOUT <=

17

\--MOV R0,10H \--MOV R1,4H \--L1:INT R2 \ \--INC R0 \--DEC R1 \\ L1 \--MOV R0 10H \--MOV R1 4H \--L2:LAD(R0) R2 \ \ \ \ \ \--DEC R1 \--TEST R1 \ \ \END A;

8.2 ALU(运算器)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;1 USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY ALU IS PORT(

X: IN STD_LOGIC_VECTOR(7 DOWNTO 0); Y: IN STD_LOGIC_VECTOR(7 DOWNTO 0); S2,S1,S0: IN STD_LOGIC;

ALUOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ;

18

SF: OUT STD_LOGIC ); END ALU;

ARCHITECTURE A OF ALU IS

SIGNAL AA,BB,TEMP:STD_LOGIC_VECTOR(8 DOWNTO 0); BEGIN

PROCESS BEGIN

IF(S2='0' AND S1='0' AND S0='0') THEN --ADD AA<='0'&X; BB<='0'&Y;

TEMP<=AA+BB;

ALUOUT<=TEMP(7 DOWNTO 0); SF<=TEMP(7);

ELSIF(S2='0' AND S1='1' AND S0='0') THEN --INC AA<='0'&Y; TEMP<=AA+1;

ALUOUT<=TEMP(7 DOWNTO 0); SF<=TEMP(7);

ELSIF(S2='0' AND S1='1' AND S0='1') THEN --DEC AA<='0'&Y; TEMP<=AA-1;

ALUOUT<=TEMP(7 DOWNTO 0); SF<=TEMP(7); ELSIF(S2='1' AND S1='1' AND S0='1') THEN --MUL AA<='0'&X; BB<='0'&Y; TEMP<=AA*BB; ALUOUT<=TEMP(7 DOWNTO 0); ELSIF(S2='1' AND S1='0' AND S0='0') THEN --TEST AA<='0'&Y; SF<=AA(7);

ELSIF(S2='1' AND S1='1' AND S0='0') THEN --Rd->BUS ALUOUT<=Y; ELSE

ALUOUT<=\ SF<='0'; END IF; END PROCESS; END A;

19

8.3状态条件寄存器

只保留了用到的SF LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY PSW IS PORT(

S,LDPSW: IN STD_LOGIC; SF: OUT STD_LOGIC ); END PSW;

ARCHITECTURE A OF PSW IS BEGIN

PROCESS(LDPSW) BEGIN

IF(LDPSW'EVENT AND LDPSW='1') THEN SF<=S; END IF; END PROCESS; END A;

20

8.4微程序控制器

内部结构:

21

( 1 ) 地址转移逻辑电路

程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY ADDR IS PORT(

I4,I3,I2,I1: IN STD_LOGIC; SF,P2,P1,T4: IN STD_LOGIC;

SE6,SE5,SE4,SE3,SE2,SE1: OUT STD_LOGIC );

END ADDR;

ARCHITECTURE A OF ADDR IS BEGIN

SE6 <= '1';

SE5 <= NOT(NOT(SF) AND P2 AND T4); SE4 <= NOT(I4 AND P1 AND T4); SE3 <= NOT(I3 AND P1 AND T4); SE2 <= NOT(I2 AND P1 AND T4); SE1 <= NOT(I1 AND P1 AND T4); END A;

(2)微地址寄存器

22

微地址寄存器uar的内部结构:

程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY MMM IS PORT(

SE,T2,D,CLR: IN STD_LOGIC; UA: OUT STD_LOGIC

23

);

END MMM;

ARCHITECTURE A OF MMM IS BEGIN

PROCESS(CLR,SE,T2) BEGIN IF(CLR='0') THEN UA <= '0'; ELSIF(SE='0') THEN UA <= '1'; ELSIF(T2'EVENT AND T2='1') THEN UA <= D; END IF; END PROCESS;

(3)微地址转换器F1

程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_116 ALL; ENTITY F1 IS PORT(

UA5,UA4,UA3,UA2,UA1,UA0:IN STD_LOGIC; D:OUT STD_LOGIC_VECTOR(5 DOWNTO 0) );

END F1;

ARCHITECTURE A OF F1 IS BEGIN

D(5)<=UA5; D(4)<=UA4; D(3)<=UA3; D(2)<=UA2; D(1)<=UA1; D(0)<=UA0; END A;

24

(4)控制存储器

程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNTROM IS PORT(

ADDR: IN STD_LOGIC_VECTOR(5 DOWNTO 0); UA:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); D:OUT STD_LOGIC_VECTOR(19 DOWNTO 0) );

END COUNTROM;

ARCHITECTURE A OF COUNTROM IS

SIGNAL DATAOUT: STD_LOGIC_VECTOR(25 DOWNTO 0); BEGIN

PROCESS BEGIN

CASE ADDR IS WHEN \=> DATAOUT<=\ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \=> DATAOUT<=\ WHEN \ WHEN \=> DATAOUT<=\ WHEN OTHERS => DATAOUT<=\ END CASE;

UA(5 DOWNTO 0)<=DATAOUT(5 DOWNTO 0);

25

D(19 DOWNTO 0)<=DATAOUT(25 DOWNTO 6); END PROCESS; END A;

(5)微命令寄存器

程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY MCOMMAND IS PORT(

T2,T3,T4:IN STD_LOGIC;

D:IN STD_LOGIC_VECTOR(19 DOWNTO 0);

LOAD,LDPC,LDAR,LDIR,LDRI,LDPSW,RS_B,S2,S1,S0:OUT STD_LOGIC; ALU_B,SW_B,LED_B,RD_D,CS_D,RAM_B,CS_I,ADDR_B,P1,P2:OUT STD_LOGIC );

END MCOMMAND;

ARCHITECTURE A OF MCOMMAND IS

SIGNAL DATAOUT:STD_LOGIC_VECTOR(19 DOWNTO 0); BEGIN

PROCESS(T2) BEGIN

26

IF(T2'EVENT AND T2='1') THEN

DATAOUT(19 DOWNTO 0)<=D(19 DOWNTO 0); END IF;

LOAD<=DATAOUT(19);

LDPC<=DATAOUT(18) AND T4; LDAR<=DATAOUT(17) AND T3; LDIR<=DATAOUT(16) AND T3; LDRI<=DATAOUT(15) AND T4; LDPSW<=DATAOUT(14) AND T4; RS_B<=DATAOUT(13); S2<=DATAOUT(12); S1<=DATAOUT(11); S0<=DATAOUT(10); ALU_B<=DATAOUT(9); SW_B<=DATAOUT(8); LED_B<=DATAOUT(7);

RD_D<=NOT(NOT DATAOUT(6) AND (T2 OR T3)); CS_D<=NOT(NOT DATAOUT(5) AND T3); RAM_B<=DATAOUT(4); CS_I<=DATAOUT(3); ADDR_B<=DATAOUT(2); P1<=DATAOUT(1); P2<=DATAOUT(0); END PROCESS; END A;

(6)微地址转换器F2

程序:

LIBRARY IEEE; LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY F2 IS PORT(

D:IN STD_LOGIC_VECTOR(5 DOWNTO 0);

UA5,UA4,UA3,UA2,UA1,UA0: OUT STD_LOGIC ); END F2;

27

ARCHITECTURE A OF F2 IS BEGIN

UA5<=D(5); UA4<=D(4); UA3<=D(3); UA2<=D(2); UA1<=D(1); UA0<=D(0); END A;

(7)指令代码转换器F3

程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY F3 IS PORT(

D:IN STD_LOGIC_VECTOR(3 DOWNTO 0); UA3,UA2,UA1,UA0: OUT STD_LOGIC ); END F3;

ARCHITECTURE A OF F3 IS BEGIN

UA3<=D(3); UA2<=D(2); UA1<=D(1); UA0<=D(0); END A;

8.5寄存器单元

程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

28

ENTITY LS273 IS PORT(

D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); O: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); CLK: IN STD_LOGIC );

END LS273;

ARCHITECTURE A OF LS273 IS BEGIN

PROCESS(CLK) BEGIN IF(CLK'EVENT AND CLK='1')THEN O<=D; END IF; END PROCESS; END A;

8.6 1:2分配器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY FEN2 IS PORT(

LED_B:IN STD_LOGIC;

DBUS:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

FENOUT,OUTBUS:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );

END FEN2;

ARCHITECTURE A OF FEN2 IS BEGIN

PROCESS BEGIN

IF(LED_B='0') THEN OUTBUS<=DBUS; ELSE

FENOUT<=DBUS; END IF;

END PROCESS;

29

END A;

8.6 选择器

(1) 3选1数据选择器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX3 IS PORT(

ALUOUT,RsOUT,IR_AOUT:IN STD_LOGIC_VECTOR(7 DOWNTO 0); ALU_B,Rs_B,ADDR_B:IN STD_LOGIC;

DBUS:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );

END MUX3;

ARCHITECTURE A OF MUX3 IS BEGIN

PROCESS(ALU_B,Rs_B,ADDR_B) BEGIN IF(ALU_B='0') THEN DBUS <= ALUOUT; ELSIF(Rs_B='0') THEN DBUS <= RsOUT; ELSIF(ADDR_B='0') THEN DBUS <=IR_AOUT; ELSE DBUS <= \ END IF; END PROCESS; END A;

30

(2)四选一数据选择器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX4_1 IS PORT(

R0,R1,R2,R3:IN STD_LOGIC_VECTOR(7 DOWNTO 0); X:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); I11,I10:IN STD_LOGIC );

END MUX4_1;

ARCHITECTURE A OF MUX4_1 IS BEGIN

PROCESS BEGIN

IF(I11='0' AND I10='0') THEN X<=R0;

ELSIF(I11='0' AND I10='1')THEN X<=R1;

ELSIF(I11='1' AND I10='0')THEN X<=R2; ELSE

X<=R3; END IF;

END PROCESS; END A;

31

(3)2-4选择器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY DECODER IS PORT(

I9,I8:IN STD_LOGIC;

Y0,Y1,Y2,Y3:OUT STD_LOGIC );

END DECODER;

ARCHITECTURE A OF DECODER IS BEGIN

PROCESS BEGIN

IF(I9='0' AND I8='0') THEN Y0<='1'; Y1<='0'; Y2<='0'; Y3<='0';

ELSIF(I9='0' AND I8='1') THEN Y0<='0'; Y1<='1'; Y2<='0'; Y3<='0';

ELSIF(I9='1' AND I8='0') THEN Y0<='0'; Y1<='0'; Y2<='1'; Y3<='0'; ELSE

Y0<='0'; Y1<='0';

32

Y2<='0'; Y3<='1'; END IF; END PROCESS; END A;

8.7程序计数器

程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY PC IS PORT(

LOAD,LDPC,CLR: IN STD_LOGIC;

D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); O: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END PC;

ARCHITECTURE A OF PC IS

SIGNAL QOUT: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

PROCESS(LDPC,CLR,LOAD) BEGIN IF(CLR='0')THEN QOUT<=\ ELSIF(LDPC'EVENT AND LDPC='1')THEN IF(LOAD='0')THEN QOUT<=D; ELSE QOUT<=QOUT+1; END IF; END IF;

33

END PROCESS; O<=QOUT; END A;

8.8 指令寄存器

程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY IR IS PORT(

D: IN STD_LOGIC_VECTOR(15 DOWNTO 0); CLK: IN STD_LOGIC;

Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ); END IR;

ARCHITECTURE A OF IR IS BEGIN

PROCESS(CLK) BEGIN

IF(CLK'EVENT AND CLK='1') THEN Q<=D; END IF; END PROCESS; END A;

8.9 时序产生器

程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNTER IS PORT(

CLK,CLR: IN STD_LOGIC;

34

T2,T3,T4: OUT STD_LOGIC );

END COUNTER;

ARCHITECTURE A OF COUNTER IS

SIGNAL X:STD_LOGIC_VECTOR(1 DOWNTO 0):=\BEGIN

PROCESS(CLK,CLR) BEGIN

IF(CLR='0') THEN T2<='0'; T3<='0'; T4<='0'; X<=\

ELSIF(CLK'EVENT AND CLK='1') THEN X<=X+1;

T2<=(NOT X(1))AND X(0); T3<=X(1) AND(NOT X(0)); T4<=X(1) AND X(0); END IF; END PROCESS; END A;

8.10与门

本文来源:https://www.bwwdw.com/article/v567.html

Top