吸土城职业技术学校计组撒比课设TEC8硬布线控制器的设计实现

LIBRARY ieee;
USE ieee.std_logic_1164.all;
 
ENTITY cpu IS
	PORT (
		SW : IN std_logic_vector(2 Downto 0);            --向量形式简洁易懂
		IR : IN std_logic_vector(7 Downto 4);
		W1,W2,W3 : IN std_logic;
		C,Z,CLR,T3 : IN std_logic;
		ARINC,CIN,DRW,LPC,LAR,LIR,LDZ,LDC,PCINC,PCADD,SELCTL,M,MEMW,STOP : OUT std_logic;
		SHORT,LONG,ABUS,SBUS,MBUS : OUT std_logic;
		S,SEL : OUT std_logic_vector(3 Downto 0)
	);    
END cpu;
 
ARCHITECTURE cont OF cpu IS
SIGNAL ST0 : std_logic;
SIGNAL SST0 : std_logic;

BEGIN
	PROCESS(ST0,SST0,SW,IR,CLR,T3,W1,W2,W3)   --敏感信号表
	BEGIN
		IF (CLR='0') THEN                     --clear信号
			ST0<='0';
			SST0<='0';
			CIN<='0';                             --初始值
			DRW<='0';
			LPC<='0';
			LAR<='0';
			LIR<='0';
			LDZ<='0';
			LDC<='0';
			PCINC<='0';
			PCADD<='0';
			SELCTL<='0';
			M<='0';
			S<="0000";
			SEL<="0000";
			MEMW<='0';
			STOP<='0';
			SHORT<='0';
			LONG<='0';
			ABUS<='0';
			SBUS<='0';
			MBUS<='0';
			ARINC<='0';
		ELSE
			CIN<='0';                              --初始值
			DRW<='0';
			LPC<='0';
			LAR<='0';
			LIR<='0';
			LDZ<='0';
			LDC<='0';
			PCINC<='0';
			PCADD<='0';
			SELCTL<='0';
			M<='0';
			S<="0000";
			SEL<="0000";
			MEMW<='0';
			STOP<='0';
			SHORT<='0';
			LONG<='0';
			ABUS<='0';
			SBUS<='0';
			MBUS<='0';
			ARINC<='0';
			SST0<=(NOT ST0) AND ((SW(2) AND (NOT(SW(1))) AND (NOT SW(0)) AND W2)OR((NOT SW(2)) AND SW(1) AND (NOT SW(0)) AND W1) OR ((NOT SW(2)) AND (NOT SW(1)) AND SW(0) AND W1));
			--用译码形式表示SST0
			IF(SST0='1' ) THEN
				IF (T3'EVENT AND (T3='0'))THEN --T3下降沿
					ST0<='1';
				END IF;
			END IF;
			CASE SW IS  -- 根据硬连线控制器参考流程图采用流程的形式
				WHEN "100" =>   --写寄存器
					IF (ST0='0') THEN
						IF (W1='1') THEN
							SBUS<='1';
							SEL<="0011";
							SELCTL<='1';
							DRW<='1';
							STOP<='1';
						END IF;
						IF (W2='1') THEN
							SBUS<='1';
							SEL<="0100";
							SELCTL<='1';
							DRW<='1';
							STOP<='1';
							SST0<='1';
						END IF;
					END IF;
					IF (ST0='1') THEN
						IF (W1='1') THEN
							SBUS<='1';
							SEL<="1001";
							SELCTL<='1';
							DRW<='1';
							STOP<='1';
						END IF;
						IF (W2='1') THEN
							SBUS<='1';
							SEL<="1110";
							SELCTL<='1';
							DRW<='1';
							STOP<='1';
						END IF;
					END IF;
				WHEN "011" =>                 --读寄存器
					IF (W1='1') THEN
					SEL<="0001";
					SELCTL<='1';
					STOP<='1';
					END IF;
					IF (W2='1') THEN
					SEL<="1011";
					SELCTL<='1';
					STOP<='1';
					END IF;
				WHEN "010"=> --读存储器
					IF (ST0='0') THEN
						IF (W1='1') THEN
							SBUS<='1';
							LAR<='1';
							STOP<='1';
							SHORT<='1';
							SELCTL<='1';
							SST0<='1';
						END IF;
					END IF;
					IF (ST0='1') THEN
						IF (W1='1') THEN
							MBUS<='1';
							ARINC<='1';
							STOP<='1';
							SHORT<='1';
							SELCTL<='1';
						END IF;
					END IF;
				WHEN "001"=> --写存储器
					IF (ST0='0') THEN
						IF (W1='1') THEN
							SBUS<='1';
							LAR<='1';
							STOP<='1';
							SHORT<='1';
							SELCTL<='1';
							SST0<='1';
						END IF;
					END IF;
					IF (ST0='1') THEN
						IF (W1='1') THEN
							SBUS<='1';
							MEMW<='1';
							ARINC<='1';
							STOP<='1';
							SHORT<='1';
							SELCTL<='1';
						END IF;
					END IF;
				WHEN "000"=> --取指
					IF (W1='1') THEN
						LIR<='1';
						PCINC<='1';
					END IF;
					
					CASE IR IS
						WHEN "0001"=> --ADD
							IF (W2='1') THEN
								S<="1001";
								CIN<='1';
								ABUS<='1';
								DRW<='1';
								LDZ<='1';
								LDC<='1';
							END IF;
						WHEN "0010"=> --SUB
							IF (W2='1') THEN
								S<="0110";
								ABUS<='1';
								DRW<='1';
								LDZ<='1';
								LDC<='1';
							END IF;
						WHEN "0011"=> -- AND 
							IF (W2='1') THEN
								M<='1';
								S<="1011";
								ABUS<='1';
								DRW<='1';
								LDZ<='1';
							END IF;
						WHEN "0100"=> --INC
							IF (W2='1') THEN
								S<="0000";
								ABUS<='1';
								DRW<='1';
								LDZ<='1';
								LDC<='1';
							END IF;
						WHEN "0101"=> --LD
							IF (W2='1') THEN
								M<='1';
								S<="1010";
								ABUS<='1';
								LAR<='1';
								LONG<='1';
							END IF;
							IF (W3='1') THEN
								DRW<='1';
								MBUS<='1';
							END IF;
						WHEN "0110"=> --ST
							IF (W2='1') THEN
								M<='1';
								S<="1111";
								ABUS<='1';
								LAR<='1';
								LONG<='1';
							END IF;
							IF (W3='1') THEN
								S<="1010";
								M<='1';
								ABUS<='1';
								MEMW<='1';
							END IF;
						WHEN "0111"=> --JC
							IF (W2='1') THEN
								IF (C='1') THEN
									PCADD<='1';
								END IF;
							END IF;
						WHEN "1000"=> --JZ
							IF (W2='1') THEN
								IF (Z='1') THEN
									PCADD<='1';
								END IF;
							END IF;
						WHEN "1001"=> --JMP
							IF (W2='1') THEN
								M<='1';
								S<="1111";
								ABUS<='1';
								LPC<='1';
							END IF;
						WHEN "1010"=> --OUT
							IF (W2='1') THEN
								M<='1';
								S<="1010";
								ABUS<='1';
							END IF;
						WHEN "1011"=> --OR
							IF (W2='1') THEN
								M<='1';
								S<="1110";
								ABUS<='1';
								DRW<='1';
								LDZ<='1';
							END IF;
						WHEN "1100"=> --XOR
							IF (W2='1') THEN
								M<='1';
								S<="0110";
								ABUS<='1';
								DRW<='1';
								LDZ<='1';
							END IF;
						WHEN "1101"=> --DOUBLE
							IF (W2='1') THEN
								S<="1100";
								CIN<='1';
								ABUS<='1';
								DRW<='1';
								LDZ<='1';
								LDC<='1';
							END IF;
						WHEN "1110"=> --STP
							IF (W2='1') THEN
							STOP<='1';
							END IF;
						WHEN OTHERS=>SBUS<='0';
					END CASE;
					
				WHEN OTHERS=>SBUS<='0';
				END CASE;
			END IF;
	END PROCESS;
END cont;

连着两学期没选到数据结构也是没谁了,我寻思我又不搞硬件逼着一半同学网上抄代码,学院领导脑子是不是铸币。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值