TD4CPU-Arduino配合74系列芯片自制CPU-2-Arduino中文社区 - Powered by Discuz! Archiver

广州创元素 发表于 2021-6-24 17:35

TD4CPU-Arduino配合74系列芯片自制CPU-2

指令译码电路(取指令)- 每个时钟周期的脉冲来临时,就进行一次取指令、译码、并执行- 被译码后,相应的电路执行指令预设的动作进行操作
https://pic4.zhimg.com/80/v2-d4241695f4df0cded75ca858be6c45f3_720w.jpg
这个译码电路相当有5个输入,共2的5次方种输入可能性,6个输出,2的6次方种输出可能性。然而仔细分析之下,我们需要的有意义的操作指令和相应的输出无外乎以下这些情况。
https://pic2.zhimg.com/80/v2-eac37a64acd4f153f78a16424757fccd_720w.jpg

所以,总的运行架构框图如图所示
https://pic3.zhimg.com/80/v2-3bb95b760ad898f023e61d2a03dabb6e_720w.jpg

这个指令译码电路,设计过程看起来稍显复杂,然而它只是一个与时序无关的纯组合逻辑电路。参照表格所列,将所有输出结果用采用数字电子技术课本中的最小与或表达式写下,并运用包括德摩根定律在内的逻辑代数定律适度整理后,权衡器件选择和数量,就可得出如下最终的译码电路。
https://pic2.zhimg.com/80/v2-1a5b4d3723b52646f890839301e2bbd5_720w.jpg


https://pic1.zhimg.com/80/v2-899e122c8795956ce6e932e64ea587c4_720w.jpg

https://pic2.zhimg.com/80/v2-a4c33e105788dc9d41d19c7ba5ab2229_720w.jpg
https://pic3.zhimg.com/80/v2-3e76547e5885df1313a42d28f08a9fde_720w.jpghttps://pic3.zhimg.com/80/v2-77aac883261a10c656206a9e93204086_720w.jpg

https://pic3.zhimg.com/80/v2-b99a360ffc8ab287547c3cd4e82dba0a_720w.jpg

最后是编程指令集
TD4 中定义了十二种类型的指令,这里汇总了所有指令的列表。下图右端所示的 SelB、SelA、Ld0、Ld1、Ld2、Ld3 表示根据操作码和标志创建的解码信号。
https://pic1.zhimg.com/80/v2-d7f297fc746d8366f96e5d5ed98d7724_720w.jpg

https://pic4.zhimg.com/80/v2-437ad47448943030e39023f123b421f7_720w.jpg
     将立即数数据传送到 A 寄存器。     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
https://pic2.zhimg.com/80/v2-c292d02047f7337ac762b0d6a4653f29_720w.jpg
     将立即数传送到 B 寄存器。     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
https://pic1.zhimg.com/80/v2-03e575abf86b0e7187d335dd72ea17ec_720w.jpg
     将 B 寄存器传送到 A 寄存器。     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
https://pic1.zhimg.com/80/v2-8630b60a0d65c2a87cc3075d09b49954_720w.jpg
     将 A 寄存器转移到 B 寄存器。     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
https://pic2.zhimg.com/80/v2-eb969e494854e3e1cfcc099339ea498d_720w.jpg
     将立即数添加到 A 寄存器。     在运行时,它不受 C 标志的影响。执行后,当发生进位时,C 标志设置为 1。
https://pic3.zhimg.com/80/v2-feb021cfccda47fc10f1d03c46f3da86_720w.jpg
     将立即数添加到 B 寄存器。     在运行时,它不受 C 标志的影响。执行后,当发生进位时,C 标志设置为 1。
https://pic4.zhimg.com/80/v2-f839930ebb6130a0e12f20c28074b39b_720w.jpg
     将数据从输入端口传输到 A 寄存器。     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
https://pic1.zhimg.com/80/v2-a7aab6e6037308659bef807d52c706f8_720w.jpg
     将数据从输入端口传输到 B 寄存器。     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
https://pic2.zhimg.com/80/v2-cb7e3cf619a9b1ba6838cdf41400f535_720w.jpg
     将立即数据传输到输出端口。     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
https://pic1.zhimg.com/80/v2-c2a7994357aaaccc5c073a2ac1809d14_720w.jpg
     B 将寄存器转发到输出端口。     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
https://pic2.zhimg.com/80/v2-05a9312e2e3ce9dfb5be6222f06ff659_720w.jpg
     跳转到立即数指示的地址。     在运行时,它不受 C 标志的影响。执行后,C 标志变为 0。
https://pic3.zhimg.com/80/v2-c318a5e995b62ea853cbae6fa6550eb6_720w.jpg
     当 C 标志为 0 时,它跳转到立即数所指示的地址。当 C 标志为 1 时,什么都不做。     在运行时,C 标志会更改行为。执行后,C 标志变为 0。
Arduino替代ROM程序data bus from D2 to D9address bit from D10 to D13//// ROM emulator for TTL based 4-bit CPUbyte prog[16];//void setup() {byte i;for(i=0;i<16;i++){prog=0;}//// initialize program/////////program part of 4-bit CPU/////////////////simple blinking/////////prog=0b10110011;//prog=0b10110110;//prog=0b10111100;//prog=0b10111000;//prog=0b10111000;//prog=0b10111100;//prog=0b10110110;//prog=0b10110011;//prog=0b10110001;//prog=0b11110000;////////////////////////////////////////////other commands////0011abcd: MOV "abcd" to A register////0111abcd: MOV "abcd" to B register////00010000: MOV B register to A register////01000000: MOV A register to B register////0000abcd: ADD "abcd" to A register////0101abcd: ADD "abcd" to B register////00100000: MOV input port (DIP switch) to A register////01110000: MOV input port (DIP switch) to B register////1011abcd: MOV "abcd" to output port (LED)////10010000: MOV B register to output port (LED)////1111abcd: JMP to "abcd"////1110abcd: IF C \neq = 0 JMP to "abcd"//// other details can be found in the book....prog=0b10110001; //OUT(1011) "0001" to LEDprog=0b10110010; //OUT(1011) "0010" to LEDprog=0b10110100; // same till 0b1110prog=0b10111000;prog=0b10111001;prog=0b10111010;prog=0b10111100;prog=0b10111101;prog=0b10111110;prog=0b10111111;prog=0b10110000;prog=0b10111111;prog=0b10110000;prog=0b10111111;prog=0b10110000;prog=0b11110000; // JMP(1111) to "0000" first of program      Serial.begin(9600);//// address bit from D10 to D13 for(i=10; i<14; i++){pinMode(i, INPUT);}//// data bus from D2 to D9for(i=2; i<10; i++){   pinMode(i, OUTPUT);   }}// the loop function runs over and over again forevervoid loop() {boolean A[5],b[8];byte i,command_data;byte temp1;// address read    A[0]=digitalRead(10);    A[1]=digitalRead(11);    A[2]=digitalRead(12);    A[3]=digitalRead(13);    i=A[0]+2*A[1]+4*A[2]+8*A[3];   // Serial.println(i);    command_data=prog;    //Serial.println(command_data);/// converting to each bit    b[0]=command_data &0b00000001;   b[1]=(command_data & 0b00000010);    b[2]=(command_data & 0b00000100);    b[3]=(command_data & 0b00001000);    b[4]=(command_data & 0b00010000);    b[5]=(command_data & 0b00100000);    b[6]=(command_data & 0b01000000);    b[7]=(command_data & 0b10000000);///////       for(i=2;i<10;i++){      temp1=i+1;      digitalWrite(i,b2]);    }}

参考书籍:
https://pic3.zhimg.com/80/v2-42f7d4b00e268fd797a5ffdba9b2809a_720w.jpghttps://pic4.zhimg.com/80/v2-9b7c2e81d4abd9b87af9dff91c54d93b_720w.jpg


t3486784401 发表于 2021-6-24 23:04

这书有年头了,看样子是 2003 年的:

https://book.douban.com/subject/11604370/

广州创元素 发表于 2021-6-25 04:13

t3486784401 发表于 2021-6-24 23:04
这书有年头了,看样子是 2003 年的:

https://book.douban.com/subject/11604370/

没错,但是非常经典,而且国内没太多推广的。
页: [1]
查看完整版本: TD4CPU-Arduino配合74系列芯片自制CPU-2