实验桂林电子科技大学系统实验报告_第1页
实验桂林电子科技大学系统实验报告_第2页
实验桂林电子科技大学系统实验报告_第3页
实验桂林电子科技大学系统实验报告_第4页
实验桂林电子科技大学系统实验报告_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/view/4d8203da6f1aff00bed51e94.html

CISC模型微处理器设计(VHDL实现)\o"收藏到我的网摘中,并分享给我的朋友"收藏转载自马如林的博客--I'mlovin'IT(1)实验题目设计一台CISC模型机,要求具有以下验证程序所要求的功能:输入包含10个整数(无符号数)的数组M,按从小到大的顺序输出这10个数。(A类)(2)嵌入式CISC模型机数据通路框图图1模型机数据通路框图(3)操作控制器的逻辑框图图2操作控制器逻辑框图(4)模型机的指令系统和指令格式1指令系统本系统设计了10条指令:IN1(输入到目的寄存器),MOV(将一个数送入目的寄存器),MOV1(将源寄存器中的数据存储到目的寄存器所指向的地址单元),MOV2(将源寄存器所指向的地址单元中的数送入目的寄存器),OUT1(输出),CMP(将目的寄存器和源寄存器所指向的地址单元中的数据进行比较),DEC(将目的寄存器中的数据自减一),INC(将目的寄存器中的数据自加一),JMP(无条件跳转),JB(小于跳转),下表列出了每条指令的格式、汇编符号和指令功能。

助记符号指令格式功

能IN1

Rd1

0

0

0

×

×Rd(SW)->RdMOV

im

Rd1

0

0

1

×

×Rdim(im)->RdMOV1

Rs

[Rd]1

0

1

0

Rs

Rd(Rs)->[Rd]MOV2

[Rs]

Rd1

0

1

1

Rs

Rd([Rs])->RdOUT1

Rd

1

1

0

0

Rs

×

×(Rs)->LEDCMP

Rs

Rd1

1

0

1

Rs

Rd(Rs)-(Rd),锁存CY和ZIDEC

Rd

1

1

1

0

×

×Rd(Rd)-1->RdINC

Rd

1

1

1

1

×

×Rd(Rd)+1->RdJMP

addr

0

1

1

0××××addraddr->PCJB

addr

0

1

1

1

××××addr若小于,则addr->PC表1指令系统格式表2指令格式下面时系统中采用的10条指令及其格式,其中Rs为源寄存器,Rd为目的寄存器,im为立即数,addr为形式地址。(1)输入指令输入(IN1)指令采用单字节指令,其格式如下:7

6

5

43

21

0操作码×

×Rs(2)MOV指令MOV指令采用双字节指令,其格式如下:7

6

5

43

21

0操作码×

×Rdim(3)MOV1指令

7

6

5

43

21

0操作码RsRd“Rs”为源寄存器,存放的是源操作数

“Rd”为目的寄存器,存放的是目的操作数所在的地址(4)MOV2指令

7

6

5

43

21

0操作码RsRd“Rs”为源寄存器,存放的是源操作数所在的地址

“Rd”为目的寄存器,存放的是目的操作数(5)输出(OUT1)指令7

6

5

43

21

0操作码Rs×

×(6)比较(CMP)指令7

6

5

43

21

0操作码RsRd“Rs”为源寄存器,存放的是源操作数

“Rd”为目的寄存器,存放的是目的操作数(7)自增一(INC)指令7

6

5

43

21

0操作码×

×Rd(8)自减一(DEC)指令7

6

5

43

21

0操作码×

×Rd(9)条件转移转移指令(JB)指令7

6

5

43

21

0操作码×

×

×

×addr“addr”中的值就是要转移的地址值。(10)无条件转移指令(JMP)指令7

6

5

43

21

0操作码×

×

×

×addr“addr”中的值就是要转移的地址值。其中对Rs和Rd的规定如下:Rs

Rd选定的寄存器0

0R00

1R11

0R21

1R33数据格式模型机规定数据的为无符号整数,且字长为8位,其格式如下:7

6

5

4

3

2

1

0数据(5)微程序流程图机器指令的CPU操作流程图是根据模型机的硬件设计、指令系统、所有指令的解释过程和控制信号的时序设计出来的,如图2所示。图中每一个方框执行的时间为一个时钟周期(包含T1-T4共4个节拍脉冲周期),对应一条微指令。框中上面的八进制数表示的是当前微指令在控制存储器中的微地址,框中下面的八进制表示的是当前微指令的后继微地址。图中的菱形框从属于它上面的方框。图2微程序流程图(6)微指令代码表1指令格式本模型机使用的微指令采用全水平型微指令,字长为29位,其中微命令字段为21位,P字段为2位,后继微地址为6位,其格式如图3所示:图3微指令格式2指令代码表表2微指令代码(7)顶层电路图1模型机的顶层电路图图4顶层电路图2模型机微地址寄存器单元aa的内部结构图5地址寄存器单元aa的电路图3模型机微程序控制器的内部结构图6微程序控制器的电路图(8)汇编语言源程序冒泡排序:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。算法思想:1

输入10个数

2

用R0存放最外层的循环次数,R1存放地址,R2和R3存放比较的两个数,从对应的R1的地址读入.R3存放大的数.如果有更大的数,则交换.最后下沉的就为一个最大的数.然后自减R0.进入下次循环.到循环结束.

3

输出结果/**冒泡程序:每次将最大的数下沉。*输入10个数,从小到大输出。*作者:longronglin*时间:2006-5-10

*/

//*输入10个数*/Mov

0AH

R0

//设置循环值10Mov

00H

R1

//设置RAM的初始地址00L1:

In1

R2

//从开关输入任意一个整数到R2Mov1

R2

[R1]

//将R2存入地址为R1的RAM单元中

Inc

R1

//自增R1Cmp

R1,R0

//比较R1,R0的大小,R1<R0跳转L1

JB

L1//*冒泡排序*/Mov

0AH

R0

//设置外循环值为10Mov

00H

R1

//设置RAM的初始地址00L2:

Mov2[R1]

R2

//取地址为R1的RAM内容到R2Inc

R1

//自增R1Cmp

R0

R1

//比较R0,R1的大小,R0<R1跳转L4JB

L4

Mov2

[R1]

R3

//取地址为R1的RAM内容到R3Cmp

R3

R2

//比较R3,R2的大小,R3<R2跳转L3JB

L3JMPL2

//无条件跳转L2//*交换两个数*/L3:

Mov1

R2

[R1]

//将R2存入地址为R1的RAM单元中Dec

R1

//自减R1Mov1

R3

[R1]

//将R3存入地址为R1的RAM单元中Inc

R1

//自增R1JMP

L2

//无条件跳转L2L4:

Dec

R0

//循环值自减1Mov

00H

R1

//设置R1的值为0Cmp

R1R0

//比较R1和R0的大小,R1<R0跳转L2JB

L2//*输出*/Mov0AH

R0

//设置循环值10Mov00H

R1

//设置RAM的初始地址00L5:

Mov2[R1]

R2

//取地址为R1的RAM内容到R2

Inc

R1

//自增R1Out1R2

//输出R2到LEDCmpR1R0

/比较R1和R0的大小,R1<R0跳转L5JBL5L6:

Out1R2

//输出R2到LED

JMPL6

//持续输出(9)机器语言源程序根据指令格式将汇编语言源程序手工汇编成机器代码如下表:

助记符地址(十六进制)机器代码功能

MOV

0AH

R0000110010000000010100AH->R0

MOV

00H

R10203100100010000000000H->R1L1:IN1

R20410000010(SW)->R2

MOV1

R2

[R1]0510101001(R2)->[R1]R2的值存入地址为R1的存储单元中

INC

R10611110001(R1)+1->R1

CMP

R1

RO0711010100([R1])-([R0]),锁存FC和FZ

JB

L108090111000000000100小于,则跳转到L1处执行

MOV

09H

R00A0B100100000000100109H->R0

外循环次数

MOV

00H

R10C0D100100010000000000H->R1L2:MOV2

[R1]R20E10110110([R1])->R2从地址为R1的存储单元里取数到R2

INC

R10F11110001(R1)+1->R1CMP

R0

R11011010001([R0])-([R1]),锁存FC和FZ

JB

L411120111000000011111小于,则跳转到L4处执行

MOV2

[R1]R31310110111([R1])->R3从地址为R1的存储单元里取数到R3CMP

R3

R21411011110([R3])-([R2]),锁存FC和FZ

JB

L315160111000000011001小于,则跳转到L3处执行JMP

L217180110000000001110跳转到L2处执行L3:MOV1

R2

[R1]1910101001(R2)->[R1]R2的值存入地址为R1的存储单元中

DEC

R11A11100001(R1)-1->R1MOV1

R3

[R1]1B10101101(R3)->[R1]R3的值存入地址为R1的存储单元中

INC

R11C11110001(R1)+1->R1JMP

L21D1E0110000000001110跳转到L2处执行L4:DEC

R01F11100000(R0)-1->R0

MOV

00H

R12021100100010000000000H->R1

CMP

R1

R02211010100([R1])-([R0]),锁存FC和FZJB

L223240111000000001110小于,则跳转到L2处执行

MOV

0AH

R0

252610010000000010100AH->R1

MOV

00H

R12728100100010000000000H->R1L5:MOV2[R1]

R22910110110([R1])->R2从地址为R1的存储单元里取数到R2

INC

R12A11110001(R1)+1->R1OUT1

R22B11001000(R2)->LEDCMP

R1

R02C11010100([R1])-([R0]),锁存FC和FZ

JB

L52D2E0111000000101001小于,则跳转到L5处执行L6:OUT1

R2

2F11001000(R2)->LEDJMP

L630310110000000101111跳转到L6处执行表3将汇编语言手工解释的机器代码(10)功能仿真波形图及结果分析以下仿真波形图的测试输入为(34,15,25,92,17,06,83,68,72,87)。1程序开始及输入10个数据.图7中的R0控制循环,R1与用自增,R2用于保存输入的数并送到与R1对应地址的RAM中.图7程序开始及输入2数的比较。如图8,R0存放外循环的比较次数,R1存放内循环的指针。R2存放每次比较的大数,R3存放与R2比较的下一个数。如果R3>R2则跳转到交换,否则顺序执行。图8比较3交换两个数。如图9,由于R3种的数25大于R2中的数15,则进行交换。使R2每次存入最大的值后,R3继续读入R1地址的值继续进行比较。图9交换两个数4结果输出(从小到大),图10中的R0控制循环,R1与用自增,R2用于输出寄存器.结果从QD输出。图中刚好从最小的数06开始输出。图10结果输出其他输入测试1有两个相同的数。输入为(34,15,25,92,83,06,83,68,72,87)输出正确2有零的一组数。输入为(34,00,25,92,83,06,83,68,72,87)输出正确

(11)芯片的引脚分配及操作演示结果分析1引脚分配(12)故障现象和故障分析①

数据和地址发送不正确:问题是微指令写错了。②

写RAM时不能正确写入,在不需要的时候写入了,反而在需要写的时候没有正确输入:问题是控制信号按照书上的写,其实不符合实际情况。才开始以为也是微指令的问题,通过调试,可以看到问题是边沿信号不对。在去掉边沿信号后,变得正常。③

仿真时发现数据出错:汇编语言的问题,发现居然有0BH出现。在设计时就知道是不应该出现的。对着指令执行流程图可以发现是设定的外循环错误。只要9次就可以。到10次就会边沿溢出。而程序却要去读0AH中的数而0AH中并没有数,所以出错,程序就无法继续。④

警告的去除:原来的程序有很多警告,在多添加控制信号后发现可以消除警告。⑤

仿真时到1ms程序停止的问题:由于在开始测试时,为了运行速度,设定的ENDTIME为1ms所致。到1ms后就没有时钟信号了,仿真程序停止运行。而我的程序1ms内并没有运行结束。所以需要延长,而在延长时间后并没有修改时钟信号。同时修改时钟信号后程序正常运行。⑥

在最后验收前突然发现两个数不交换了(原来是正常的):对照波形图,发现跳转时地址出错。查看ROM里的源程序,发现跳转代码少了一句(WHEN"00011000"=>ROMOUT<="00001110";)。修改后正确。可能在制作Word文档拷贝源程序或添加注释时不小心删除了。⑦

验收时添加一条输出结果,不需要重新编译,只需要重新仿真。当时说重新编译是口误,其实在我的操作过程就是正确的。并没有编译也就是重新仿真。编译只有在改动源代码的时候才需要。(13)软件清单1ALU子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYALUISPORT(

AC,DR:INSTD_LOGIC_VECTOR(7DOWNTO0);

S1,S0:INSTD_LOGIC;

BCDOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0);

CY,ZI:

OUTSTD_LOGIC

);ENDALU;

ARCHITECTUREAOFALUISSIGNALAA,BB,TEMP:STD_LOGIC_VECTOR(8DOWNTO0);BEGIN

PROCESS(S1,S0)

BEGIN

IF(S1='0'ANDS0='0')THEN

BCDOUT<=AC+DR;

AA<='0'&AC;

BB<='0'&DR;

TEMP<=AA+BB;

CY<=TEMP(8);

IF(TEMP="100000000")THEN

ZI<='1';

ELSE

ZI<='0';

ENDIF;

ELSIF(S1='0'ANDS0='1')THEN

BCDOUT<=AC-DR;

AA<='0'&AC;

BB<='0'&DR;

TEMP<=AA-BB;

CY<=TEMP(8);

IF(TEMP="000000000")THEN

ZI<='1';

ELSE

ZI<='0';

ENDIF;

ELSIF(S1='1'ANDS0='0')THEN

AA<='0'&AC;

TEMP<=AA+1;

BCDOUT<=TEMP(7DOWNTO0);

CY<=TEMP(8);

IF(TEMP="100000000")THEN

ZI<='1';

ELSE

ZI<='0';

ENDIF;

ELSIF(S1='1'ANDS0='1')THEN

AA<='0'&AC;

TEMP<=AA-1;

BCDOUT<=TEMP(7DOWNTO0);

CY<=TEMP(8);

IF(TEMP="000000000")THEN

ZI<='1';

ELSE

ZI<='0';

ENDIF;

ELSE

BCDOUT<="00000000";

CY<='0';

ZI<='0';

ENDIF;

ENDPROCESS;ENDA;2状态条件寄存器子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYLS74ISPORT(

LDFR:INSTD_LOGIC;

CY,ZI:INSTD_LOGIC;

FC,FZ:OUTSTD_LOGIC

);ENDLS74;

ARCHITECTUREAOFLS74ISBEGIN

PROCESS(LDFR)

BEGIN

IF(LDFR'EVENTANDLDFR='1')THEN

FC<=CY;

FZ<=ZI;

ENDIF;

ENDPROCESS;ENDA;3暂存器、通用寄存器、地址寄存器、指令寄存器子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYLS273ISPORT(

D_IN:INSTD_LOGIC_VECTOR(7DOWNTO0);

CLK:INSTD_LOGIC;

D_OUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);ENDLS273;

ARCHITECTUREAOFLS273ISBEGIN

PROCESS(CLK)

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

D_OUT<=D_IN;

ENDIF;

ENDPROCESS;ENDA;4时序产生器子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOUNTERISPORT(

Q,CLR:INSTD_LOGIC;

T2,T3,T4:OUTSTD_LOGIC

);ENDCOUNTER;

ARCHITECTUREAOFCOUNTERISSIGNALX:STD_LOGIC_VECTOR(1DOWNTO0);BEGIN

PROCESS(Q,CLR)

BEGIN

IF(CLR='0')THEN

T2<='0';

T3<='0';

T4<='0';

X<="00";

ELSIF(Q'EVENTANDQ='1')THEN

X<=X+1;

T2<=(NOTX(1))ANDX(0);

T3<=X(1)AND(NOTX(0));

T4<=X(1)ANDX(0);

ENDIF;

ENDPROCESS;ENDA;5程序计数器子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYPCISPORT(

LOAD,LDPC,CLR:INSTD_LOGIC;

BUS_IN:INSTD_LOGIC_VECTOR(7DOWNTO0);

PCOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);ENDPC;

ARCHITECTUREAOFPCISSIGNALQOUT:STD_LOGIC_VECTOR(7DOWNTO0);BEGIN

PROCESS(LDPC,CLR,LOAD)

BEGIN

IF(CLR='0')

THEN

QOUT<="00000000";

ELSIF(LDPC'EVENTANDLDPC='1')THEN

IF(LOAD='0')THEN

QOUT<=BUS_IN;

--BUS->PC

ELSE

QOUT<=QOUT+1;

--PC+1

ENDIF;

ENDIF;

ENDPROCESS;

PCOUT<=QOUT;ENDA;6选择从PC或BUS中读入数据到AR的选择器子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMUX2_1ISPORT(

I_D:INSTD_LOGIC;

PC_IN,BUS_IN:INSTD_LOGIC_VECTOR(7DOWNTO0);

MUX2_1OUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);ENDMUX2_1;

ARCHITECTUREAOFMUX2_1ISBEGIN

PROCESS(I_D,PC_IN,BUS_IN)

BEGIN

IF(I_D='0')THEN

MUX2_1OUT<=BUS_IN;

ELSE

MUX2_1OUT<=PC_IN;

ENDIF;

ENDPROCESS;ENDA;7ROM子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYROM16ISPORT(

ROMOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0);

ADDR:INSTD_LOGIC_VECTOR(7DOWNTO0);

RE,CS_I:INSTD_LOGIC);ENDROM16;ARCHITECTUREAOFROM16ISBEGIN

PROCESS(RE,CS_I)

BEGIN

IF(RE='0'ANDCS_I='0')THEN

CASEADDRIS

WHEN"00000000"=>ROMOUT<="10010000";

--MOV

0AH

R0

WHEN"00000001"=>ROMOUT<="00001010";

WHEN"00000010"=>ROMOUT<="10010001";

--MOV

00H

R1

WHEN"00000011"=>ROMOUT<="00000000";

WHEN"00000100"=>ROMOUT<="10000010";

--L1:

IN1

R2

WHEN"00000101"=>ROMOUT<="10101001";

--MOV1

R2

[R1]

WHEN"00000110"=>ROMOUT<="11110001";

--INC

R1

WHEN"00000111"=>ROMOUT<="11010100";

--CMP

R1

RO

WHEN"00001000"=>ROMOUT<="01110000";

--JB

L1

WHEN"00001001"=>ROMOUT<="00000100";

WHEN"00001010"=>ROMOUT<="10010000";

--MOV

09H

R0

WHEN"00001011"=>ROMOUT<="00001001";

WHEN"00001100"=>ROMOUT<="10010001";

--MOV

00H

R1

WHEN"00001101"=>ROMOUT<="00000000";

WHEN"00001110"=>ROMOUT<="10110110";

--L2:

MOV2

[R1]

R2

WHEN"00001111"=>ROMOUT<="11110001";

--INC

R1

WHEN"00010000"=>ROMOUT<="11010001";

--CMP

R0

R1

WHEN"00010001"=>ROMOUT<="01110000";

--JB

L4

WHEN"00010010"=>ROMOUT<="00011111";

WHEN"00010011"=>ROMOUT<="10110111";

--MOV2

[R1]

R3

WHEN"00010100"=>ROMOUT<="11011110";

--CMP

R3

R2

WHEN"00010101"=>ROMOUT<="01110000";

--JB

L3

WHEN"00010110"=>ROMOUT<="00011001";

WHEN"00010111"=>ROMOUT<="01100000";

--JMP

L2

WHEN"00011000"=>ROMOUT<="00001110";

WHEN"00011001"=>ROMOUT<="10101001";

--L3:

MOV1

R2

[R1]

WHEN"00011010"=>ROMOUT<="11100001";

--DEC

R1

WHEN"00011011"=>ROMOUT<="10101101";

--MOV1

R3

[R1]

WHEN"00011100"=>ROMOUT<="11110001";

--INC

R1

WHEN"00011101"=>ROMOUT<="01100000";

--JMP

L2

WHEN"00011110"=>ROMOUT<="00001110";

WHEN"00011111"=>ROMOUT<="11100000";

--L4:DEC

R0

WHEN"00100000"=>ROMOUT<="10010001";

--MOV

00H

R1

WHEN"00100001"=>ROMOUT<="00000000";

WHEN"00100010"=>ROMOUT<="11010100";

--CMP

R1

R0

WHEN"00100011"=>ROMOUT<="01110000";

--JB

L2

WHEN"00100100"=>ROMOUT<="00001110";

WHEN"00100101"=>ROMOUT<="10010000";

--MOV

0AH

R0

WHEN"00100110"=>ROMOUT<="00001010";

WHEN"00100111"=>ROMOUT<="10010001";

--MOV

00H

R1

WHEN"00101000"=>ROMOUT<="00000000";

WHEN"00101001"=>ROMOUT<="10110110";

--L5:

MOV2

[R1]

R2

WHEN"00101010"=>ROMOUT<="11110001";

--INC

R1

WHEN"00101011"=>ROMOUT<="11001000";

--OUT1

R2

WHEN"00101100"=>ROMOUT<="11010100";

--CMP

R1

R0

WHEN"00101101"=>ROMOUT<="01110000";

--JB

L5

WHEN"00101110"=>ROMOUT<="00101001";

WHEN"00101111"=>ROMOUT<="11001000";

--L6:

OUT1

R2

WHEN"00110000"=>ROMOUT<="01100000";

--JMP

L6

WHEN"00110001"=>ROMOUT<="00101111";

WHENOTHERS

=>NULL;

ENDCASE;

ENDIF;

ENDPROCESS;ENDA;8RAM子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYRAMIS

PORT(

WR,CS:INSTD_LOGIC;

DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);

DOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0);

ADDR:INSTD_LOGIC_VECTOR(7DOWNTO0)

);ENDRAM;

ARCHITECTUREAOFRAMISTYPEMEMORYISARRAY(0TO31)OFSTD_LOGIC_VECTOR(7DOWNTO0);BEGIN

PROCESS(CS,WR)

VARIABLEMEM:MEMORY;

BEGIN

IF(CS='0')THEN

IF(WR='0')THEN

MEM(CONV_INTEGER(ADDR(4DOWNTO0))):=DIN;

ELSIF(WR='1')THEN

DOUT<=MEM(CONV_INTEGER(ADDR(4DOWNTO0)));

ENDIF;

ENDIF;

ENDPROCESS;ENDA;9选择对ROM或者RAM进行操作的二选一选择器子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMUX2_2ISPORT(

R_R:INSTD_LOGIC;

ROM_IN,RAM_IN:INSTD_LOGIC_VECTOR(7DOWNTO0);

MUX2_2OUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);ENDMUX2_2;

ARCHITECTUREAOFMUX2_2ISBEGIN

PROCESS(R_R,ROM_IN,RAM_IN)

BEGIN

IF(R_R='0')THEN

MUX2_2OUT<=ROM_IN;

ELSE

MUX2_2OUT<=RAM_IN;

ENDIF;

ENDPROCESS;ENDA;10五选一选择器子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMUX5ISPORT(

R0_B,R1_B,R2_B,R3_B,ALU_B:INSTD_LOGIC;

R0_IN,R1_IN,R2_IN,R3_IN,ALU_IN:INSTD_LOGIC_VECTOR(7DOWNTO0);

MUX5OUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);ENDMUX5;

ARCHITECTUREAOFMUX5ISBEGIN

PROCESS(ALU_B,R3_B,R2_B,R1_B,R0_B)

BEGIN

IF(ALU_B='1'ANDR3_B='1'ANDR2_B='1'ANDR1_B='1'ANDR0_B='0')THEN

MUX5OUT<=R0_IN;

ELSIF(ALU_B='1'ANDR3_B='1'ANDR2_B='1'ANDR1_B='0'ANDR0_B='1')THEN

MUX5OUT<=R1_IN;

ELSIF(ALU_B='1'ANDR3_B='1'ANDR2_B='0'ANDR1_B='1'ANDR0_B='1')THEN

MUX5OUT<=R2_IN;

ELSIF(ALU_B='1'ANDR3_B='0'ANDR2_B='1'ANDR1_B='1'ANDR0_B='1')THEN

MUX5OUT<=R3_IN;

ELSIF(ALU_B='0'ANDR3_B='1'ANDR2_B='1'ANDR1_B='1'ANDR0_B='1')THEN

MUX5OUT<=ALU_IN;

ELSEMUX5OUT<=ALU_IN;

ENDIF;

ENDPROCESS;ENDA;11一分二分配器子模块源程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYFEN2ISPORT(

MUX5_IN:INSTD_LOGIC_VECTOR(7DOWNTO0);

LED_B,WR:INSTD_LOGIC;

OUT_MUX3,OUT_PUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);ENDFEN2;

ARCHITECTUREAOFFEN2ISBEGIN

PROCESS(LED_B)

BEGIN

IF(LED_B='0'ANDWR='0')THEN

OUT_PUT<=MUX5_IN;

OUT_MUX3<="00000000";

ELSE

OUT_MUX3<=MUX5_IN;

ENDIF;

ENDPROCESS;ENDA;

12三选一选择器子模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMUX3ISPORT(

SW_B,CS:INSTD_LOGIC;

FEN2_IN,MUX2_2IN,SW_IN:INSTD_LOGIC_VECTOR(7DOWNTO0);

MUX3OUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);ENDMUX3;

ARCHITECTUREAOFMUX3ISBEGINPROCESS(SW_B,CS)

BEGIN

IF(SW_B='0'ANDCS='1')THEN

MUX3OUT<=SW_IN;

ELSIF(SW_B='1'ANDCS='0')THEN

MUX3OUT<=MUX2_2IN;

ELSIF(SW_B='0'ANDCS='0')THEN

MUX3OUT<=FEN2_IN;

ELSE

MUX3OUT<="11101110";

ENDIF;

ENDPROCESS;ENDA;13CENTER_CONTROL微程序控制单元1

地址转移逻辑电路ADDR源程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYADDRISPORT(

I7,I6,I5,I4:INSTD_LOGIC;

FZ,FC,T4,P1,P2:INSTD_LOGIC;

SE6,SE5,SE4,SE3,SE2,SE1:OUTSTD_LOGIC

);ENDADDR;ARCHITECTUREAOFADDRISBEGIN

SE6<='1';

SE5<=NOT((NOTFCORFZ)ANDP2ANDT4);

SE4<=NOT(I7ANDP1ANDT4);

SE3<=NOT(I6ANDP1ANDT4);

SE2<=NOT(I5ANDP1ANDT4);

SE1<=NOT(I4ANDP1ANDT4);ENDA;2

微地址寄存器AA源程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMMMISPORT(

SE:INSTD_LOGIC;

T2:INSTD_LOGIC;

D:INSTD_LOGIC;

CLR:INSTD_LOGIC;

UA:OUTSTD_LOGIC

);ENDMMM;ARCHITECTUREAOFMMMISBEGIN

PROCESS(CLR,SE,T2)

BEGIN

IF(CLR='0')THEN

UA<='0';

ELSIF(SE='0')THEN

UA<='1';

ELSIF(T2'EVENTANDT2='1')THEN

UA<=D;

ENDIF;

ENDPROCESS;ENDA;3

微地址转换器F1源程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;

ENTITYF1ISPORT(

UA5,UA4,UA3,UA2,UA1,UA0:INSTD_LOGIC;

D:OUTSTD_LOGIC_VECTOR(5DOWNTO0)

);ENDF1;ARCHITECTUREAOFF1ISBEGIN

D(5)<=UA5;

D(4)<=UA4;

D(3)<=UA3;

D(2)<=UA2;

D(1)<=UA1;

D(0)<=UA0;ENDA;4

控制存储器CONTROM源程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCONTROMISPORT(

ADDR:INSTD_LOGIC_VECTOR(5DOWNTO0);

UA:OUTSTD_LOGIC_VECTOR(5DOWNTO0);

D:OUTSTD_LOGIC_VECTOR(22DOWNTO0)

);ENDCONTROM;ARCHITECTUREAOFCONTROMISSIGNALDATAOUT:STD_LOGIC_VECTOR(28DOWNTO0);BEGIN

PROCESS(ADDR)

BEGIN

CASEADDRIS

WHEN"000000"=>DATAOUT<="11011110011001001111000000010";

WHEN"000010"=>DATAOUT<="00011001011001001011010010000";

WHEN"000011"=>DATAOUT<="11111000010001000001000000000";

WHEN"000100"=>DATAOUT<="11111000111001001011000000000";

WHEN"000101"=>DATAOUT<="11111000001001011001000000110";

WHEN"000110"=>DATAOUT<="11111000011011001111100000000";

WHEN"000111"=>DATAOUT<="11111000111110001001100000000";

WHEN"001000"=>DATAOUT<="11111000111100001001000000000";

WHEN"001001"=>DATAOUT<="00010100011001001011000000000";

WHEN"010000"=>DATAOUT<="00011000111001001011000000000";

WHEN"010110"=>DATAOUT<="11111110011001001111000001001";

WHEN"010111"=>DATAOUT<="11011110011001001111001100000";

WHEN"011000"=>DATAOUT<="11111000111001001101000000000";

WHEN"011001"=>DATAOUT<="11111110011001001111000010000";

WHEN"011010"=>DATAOUT<="11101010001001001001000000011";

WHEN"011011"=>DATAOUT<="11101010010001001001000000100";

WHEN"011100"=>DATAOUT<="11011000010001000110000000000";

WHEN"011101"=>DATAOUT<="11111000010001101001000000101";

WHEN"011110"=>DATAOUT<="11111000001001101001000000111";

WHEN"011111"=>DATAOUT<="11111000001001101001000001000";

WHEN"100000"=>DATAOUT<="00010100011001001011000000000";

WHEN"110000"=>DATAOUT<="11111000011001001111000000000";

WHENOTHERS=>DATAOUT<="11111000011001001111000000000";

ENDCASE;

UA(5DOWNTO0)<=DATAOUT(5DOWNTO0);

D(22DOWNTO0)<=DATAOUT(28DOWNTO6);

ENDPROCESS;ENDA;

5

微命令寄存器MCOMMAND源程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论