古老CPU启示录-MC14500 1位CPU(ICU)

简介

在20世纪80年代4位、8位CPU逐渐成为主流,但是当时的CPU发展还处于探索阶段,所以各种“奇葩”的CPU都有出现,今天给大家带来1-bit CPU MC14500和GI SBA。两者差不多以MC14500为例看下这款“奇葩”CPU。

MC14500是一种工业控制单元(ICU),也被认为是1位处理器。它由摩托罗拉(Motorola)生产,但几年前已停止生产。如今,MC14500已经被价格合理的FPGA取代了,包括其所有外设和程序存储器。至今仍存在使用MC14500设计的不同原因:

1、为旧的MC14500计算机创建备件;

2、重复使用MC14500软件;

3、FPGA开发(VHDL代码=>电子专家)与应用程序(应用工程师)之间的分离;

4、低成本PLC替代品;

5、在现代FPGA上运行具有历史意义的东西很有趣;

6、使用FPGA的学习项目。

框图

数据手册:http://www.brouhaha.com/~eric/retrocomputing/motorola/mc14500b/mc14500brev3.pdf

特点:

(1)16条指令;

(2)编程容易;

(3)容易掌握,不需要特殊的技术人员;

(4)由于使用外部存储器,系统变得容易;

(5)能满足用户的特定需求,具有丰富的灵活性;

(6)能满足用户的特定需求,具有丰富的灵活性;

(7)能够扩展以适应所有系统的规模和复杂程度;

(8)能够进行程序设计;

(9)B系列C-MOS符合JEDE规格;

(10)噪音容限大;

(11)不工作时漏电流小;

(12)工作电压3~18V;

(13)时钟频率范围广,一般工作频率1MHz(VDD=5V,一个时钟执行一条指令);

(14)信号输入和TTL互换;

(15)将判断作为中心工作,超过微处理器的性能;

(16)应用范围广,由继电器回路开始的逻辑判断处理到中速度的串行数据处理,还能减轻超负荷的微处理器系统的工作。

MC14500允许使用IO地址读取输入位。该位可以使用4位指令和内部1位结果寄存器RR进行处理。结果可以写入IO地址的输出位。

输入和输出数据位可以是物理输入和输出,其中可以连接电线,但它们可以连接到其他设备作为RAM或定时器。

IO的寻址完全在MC14500外部完成。MC14500的所选指令的4位和外部IO多路复用器的IO地址行导致程序存储器的数据宽度。MC14500使用术语“内存字”来表示从程序内存中输出的数据。本文档使用术语“command”作为“memory word”的同义词。因此,命令由两部分组成:指令和IO地址。

由于IO地址在MC14500的外部,因此不同实现之间的命令可能不同。此外,命令中4个指令位的位置也取决于设计。指令位可能占用命令中的高位或低位。

MC14500不包含从程序存储器中寻址要处理的命令的程序计数器。因此,MC14500设计的程序计数器位数可能不同。

程序内存或命令的宽度是指令的4位加上IOaddress行数。小型MC14500设计将使用8位宽的程序存储器,能够选择多达16个IO地址。由于这并不多,许多MC14500设计使用12位宽的程序存储器,可以选择多达256个IO地址。12位宽的程序存储器使用过去存在的4位宽的ROM设备。其他MC14500设计使用8位宽的程序存储器,但是每个MC14500命令有两个字节被读取,因此形成了一个16位宽的命令,能够寻址多达4096个IO地址线,用于物理IO、单位宽RAM和定时器硬件。在MC14500设计中,从程序存储器中读取两次会产生另一种变化,从程序中读取的第一个字节可能在一种设计中是低字节,但在另一种设计中是命令的高字节。指令集如下:

利用MC14500搭建的外围系统:

MC14500模拟器

MC14500模拟器使用web技术和javascript来独立于平台,并且在将来也可以使用。这种实现的一个缺点是javascript模拟器不能访问用户的文件系统或硬件。

模拟器在支持svg的浏览器上运行。模拟器使用的硬件架构如下图所示。

地址:https://www.linurs.org/mc14500sim/index.html

按下“步进”按钮意味着下降的时钟边缘,因此MC14500加载指令和输入数据。

释放“步进”按钮意味着上升的时钟边缘,因此MC14500写入数据。程序计数器增加。在程序存储器访问时间之后,下一条指令和IO地址出现在MC14500和输出、输入或RAM上。

详细的介绍就不过多赘述,网上还有利用Python进行汇编程序和反汇编程序的介绍。

FPGA实现

利用MC14500搭建的CPU

从上面的介绍可以看出MC14500和FPGA有很多相似的地方,接下来就用FPGA实现一下这款单比特CPU。

module mc14500b(input clk,input rst,input [3:0] i_inst,input i_data,output reg write = 0,output reg jmp = 0 ,output reg rtn = 0,output reg flag0 = 0,output reg flagf = 0,output reg o_rr = 0,output reg o_data = 0);reg ien = 0, oen = 0;reg skip = 0;always @(negedge clk or posedge rst) begin// Reset any flags from last clock.jmp <= 0;rtn <= 0;flag0 <= 0;flagf <= 0;write <= 0; // FIX this it's not right technically.if (rst) begin// reset behavior. reset internal flags and ignore clock.ien <= 0;oen <= 0;o_rr <= 0;skip <= 0;end else beginif (~skip) begin // skipcase(i_inst)4'b0000 : flag0 <= 1; // NOPO4'b0001 : o_rr <= ien & i_data; // LD4'b0010 : o_rr <= ien & ~i_data; // LDC4'b0011 : o_rr <= ien & (i_data & o_rr); // AND4'b0100 : o_rr <= ien & (~i_data & o_rr); // NAND4'b0101 : o_rr <= ien & (i_data | o_rr); // OR4'b0110 : o_rr <= ien & (~i_data | o_rr); // NOR4'b0111 : o_rr <= ien & (o_rr == i_data); // XNOR4'b1000 : begin // STO// DATA -> RR, WRITE -> 1 for a clock (if oen is allowed).o_data <= oen & o_rr;write <= oen;end4'b1001 : begin // STOC// DATA -> ~RR, WRITE -> 1 for a clock.o_data <= ~o_rr;write <= oen;end4'b1010 : ien <= i_data;4'b1011 : oen <= i_data;4'b1100 : jmp <= 1;4'b1101 : begin // RTNrtn <= 1;skip <= 1;end4'b1110 : skip <= ~o_rr;4'b1111 : flagf <= 1;endcaseendelse begin // reset skip flag after clocking with skip once.skip <= 0;endendend // neg edge
//    always @(posedge clk) begin
//        write <= 0;
//    end
endmodule

“CPU是复杂的状态机”,仿真之类的详见:

https://github.com/suisuisi/oldcpu/tree/main/mc145000

整体比较简单就不解释了。

 End 

NOW现在行动!
推荐阅读
【Vivado那些事】如何查找官网例程及如何使用官网例程【Vivado使用误区与进阶】总结篇【Vivado那些事】Vivado下头文件使用注意事项【Vivado那些事】Vivado中常用的快捷键(一)F4键【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键
HDL Designer Series(HDS)介绍
SystemVerilog数字系统设计_夏宇闻 PDF
Verilog 里面,always,assign和always@(*)区别
FPGA上如何求32个输入的最大值和次大值:分治一文读懂TCP/IP!《RISC-V on T-Core》学习笔记新年愿望是什么?先送大家一波开发软件谈谈FPGA(入门)学习的两种方式ZYNQ-迷恋ZYNQ-FPGA开发板资源分享
零基础入门FPGA,如何学习?
黑金全部开发板资料(FPGA+ZYNQ)分享
【Vivado那些事】FPGA配置失败,无法启动怎么办
你会在github上找项目吗?
图书推荐|ARM Cortex-M0 全可编程SoC原理及实现
简谈:如何学习FPGARISC-V再进阶!世界首款5纳米RISC-V SOC成功流片!
几款开源SDR平台
Xilinx 推出 Kria 自适应系统模块产品组合,在边缘加速创新和 AI应用
RISC-V指令集架构介绍及国内外厂商介绍
Vitis尝鲜(一)
SDR/无线设计中LNA和PA的基本原理
拆解1968年的美国军用电脑,真的怀疑是“穿越”啊!
一文最全科普FPGA技术知识
首个中文CPU指令规范 龙芯推出LoongArch基础架构手册
点击上方字体即可跳转阅读哟

你见过1-bit CPU吗?相关推荐

  1. [转帖]你不曾见过的国产CPU:可能是最全的龙芯系列芯片家谱(下)

    你不曾见过的国产CPU:可能是最全的龙芯系列芯片家谱(下) https://www.ijiwei.com/html/news/newsdetail?source=pc&news_id=7177 ...

  2. netback于kthread遇到cpu affinity问题

    最近的升级netback, 在测试过程中,查找vm全双工压力,rx的pps波动很厉害,见rx kthread尽管cpu affinity它是0-7 (dom0 8vcpu), 但往往,她去了物理破坏c ...

  3. CPU为什么不做成圆的而是方的?

    假设有一家芯片设计公司,像题主说的,将CPU不设计成方形而是圆形,结果会怎么样呢? 这就等于在晶圆这个大圆里刻下(芯片是光刻成的)许多小圆,效果如下图(为节约时间,我只画出了一部分).可以看到,CPU ...

  4. CPU VS GPU

    CPU VS GPU 关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器).在现代iOS设备中,都有可以运行不同软件的可编程芯片,但是由于历史原因,我们可以说CPU所做的工作都在 ...

  5. iOS CPU VS GPU

    关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器).在现代iOS设备中,都有可以运行不同软件的可编程芯片,但是由于历史原因,我们可以说CPU所做的工作都在软件层面,而GPU在硬 ...

  6. linux 系统cpu查看

    什么是物理cpu,什么是逻辑cpu,什么cpu核数,什么是超线程? ## 物理CPU 就是实实在在插在主机上看得见摸得着那块CPU硬件,可通过如下命令来查看物理CPU个数: ``` cat /proc ...

  7. CPU 主频,核数 参数解读 物理CPU,逻辑CPU,物理核 概念辨析

    Q1: CPU高主频好还是多核数好? 游戏需求 如果是主打游戏,由于游戏需要的是最简单粗暴的计算工作,这方面多核心有点无用武之地.因此,目前主流游戏都是双核心调用,四核或者更多核心的比较少. 也就是说 ...

  8. Intel的第一款CPU长啥样?Intel 4-Bit的CPU简介

    今天,当我们坐在电脑前沉浸在游戏中,和远在他乡的女友.朋友.家人聊天和语音,在互联网上冲浪.查找资料,通过网络购买自己喜欢的图书和零食,这一切目前都觉得如此地惬意和自得.但是今天的一切,也许大部分都想 ...

  9. 【Pytorch】物理cpu、逻辑cpu、cpu核数、pytorch线程数设置

    上周末写ddp,常常遇到中途退出的问题,解决中途遇到了很多CPU线程数和核心数的问题,记录如下 1. 物理cpu.逻辑cpu.cpu核数.超线程 这一部分主要来自什么是物理cpu,什么是逻辑cpu,什 ...

  10. 极品飞车20 CPU占用率很恐怖

    载入过程中 显存占用率70%左右 cpu的16个线程基本满负载 第一次见这样能将cpu全部利用起来的游戏. 转载于:https://www.cnblogs.com/buzhaoshi/p/111058 ...

最新文章

  1. Nginx HTTP负载均衡和反向代理配置
  2. java交通工具的类继承代码_Java作业-交通工具继承
  3. 说人话,搜代码,Facebook发布神经代码搜索数据集+benchmark
  4. socket 编程入门教程(一)TCP server端:3、sockaddr与sockaddr_in
  5. 35岁的程序员正在消失?No,我认识了一个50岁的程序员!
  6. 方舟服务器维护公告11月19日,明日方舟11月19日10点停机维护 更新内容一览
  7. python断言区间_断言整数在范围内
  8. 软件开发者优质资源网站
  9. 保证服务4个9的可用性的核心思路
  10. mysql dbutil_DBUtil详解
  11. 数据分析之数据透视表(Office2019)
  12. Markdown博文快速转为微信文章
  13. 无法获得递归Range.Find在Word VBA中工作
  14. 自定义控件学习之钟表制作
  15. 如何做一个吸引人的自我介绍?
  16. 22-基于单片机的LED点阵滚动显示系统
  17. Matlab之使用传感器阵列分析仪应用绘制阵列方向性图
  18. 计算机能报公检法司么,想报考公检法系统?那你了解招考条件吗?
  19. File,字符集基础知识,IO流学习(一)
  20. HTML学习之路-11background属性

热门文章

  1. Cloud 2.0时代的华为云,让产业互联网跨越新摩尔定律
  2. win10系统到苹果数据连接到服务器失败,教你如何解决win10系统下iphone连不上电脑的问题...
  3. 【案例】做一个电话簿(四)
  4. 软件产品设计:打造用户喜爱的用户体验
  5. m.2固态硬盘 服务器,M.2接口固态硬盘选购注意事项:PCIe和SATA的区别
  6. Spring源码深度解析(郝佳)-学习-源码解析-基于注解bean定义(一)
  7. excel中文名转为英文名,姓和名的第一个字母大写,中间留空格
  8. Apache Hudi 数据湖概述
  9. 数学小课堂:数学和自然科学本质的差别(微积分中的极限和生活中的极限)
  10. 使用Easypoi实现Excel导入导出