1.专栏声明
- 该专栏源于图灵程序设计丛书《CPU自制入门》,笔者学习此书来弥补对计算机底层原理的知识空白。所观,所感,所调试程序源码做下笔记于此。文笔有限,敬请谅解。
- 程序源码均来自《CPU自制入门》(个别Testbench除外,因为没有,笔者调试过程中自己写)。
- 该专栏免费和持续更新(停更会发出声明),只用于学习用途,欢迎大家一起讨论。
- 笔者也是初学者,对CPU和FPGA只是学了皮毛,故专栏记录一下以下内容:程序源码 , 问题疑惑, 离散知识点 , 调试经验。
- 若有问题疑惑,请阅读《CPU自制入门》。
2.代码规范
源于《CPU自制入门》
- 采用Verilog HDL语言,避免程序使用大量数字,而较多采用宏。
- 变量名使用英文小写字母,数字以及下划线(_)命名。
- 控制信号的极性:负逻辑信号线的名称以下划线(_)结尾。
- 宏使用英文大写字母,英文小写字母,数字以及下划线(_)命名。
- 常数使用英文大写字母和下划线(_)命名。
- 定义比特位或总线,使用单词首字母大写的驼峰拼写法(ByteDataBus)
3.参考书籍(在更新)
《CPU自制入门》
《夏宇闻数字逻辑设计》
《黑金原创教程》
4.开发工具
- Quartus (Quartus Prime 18.1) Standard Edition
- Modelsim SE-64 10.4
- Icarus Verilog + GTKWave(开源)
http://iverilog.icarus.com/
http://bleyer.org/icarus/
5.全局通用宏
- global_config.h .重要说明: global_config.h定义的参数(复位信号的极性有可能随着使用端口的更换而改变)可能会有变化。参见《CPU自制入门》61页
代码清单global_config.h
//global_config.h
`ifndef __GLOBAL_CONFIG_HEADER__
`define __GLOBAL_CONFIG_HEADER__
`define RESET_EDGE negedge //以实际为准,这里设为下降沿复位
`define RESET_ENABLE 1'b0 //复位有效
`define RESET_DISABLE 1'b1 //复位无效
`define MEM_ENABLE 1'b0 //内存有效
`define MEM_DISABLE 1'b1 //内存无效
`endif
- stddef.h 定义了信号电平高低的H , L ,以及控制信号的有效,无效等通用宏。
代码清单stddef.h
//stddef.h
`ifndef __STDDEF_HEADER__
`define __STDDEF_HEADER__
/*******信号电平******/
`define HIGH 1'b1
`define LOW 1'b0
/*******逻辑值******/
`define ENABLE 1'b1 //有效(正逻辑)
`define DISABLE 1'b0 //无效(正逻辑)
`define ENABLE_ 1'b0 //有效(负逻辑)
`define DISABLE_ 1'b1 //无效(负逻辑)
/*************/
`define READ 1'b1 //读取信号
`define WRITE 1'b0 //写入信号
`define LSB 0 //最低位
`define BYTE_DATA_W 8 //数据宽度(字节)
`define BYTE_MSB 7 //最高位
`define ByteDataBus 7:0 //数据总线(字节)
`define WORD_DATA_W 32 //数据宽度(字)
`define WORD_MSB 31 //最高位(字)
`define WordDataBus 31:0 //数据总线(字)
`define WORD_ADDR_W 30 //地址宽度
`define WORD_ADDR_MSB 29 //最高位
`define WordAddrBus 29:0 //地址总线
`define BYTE_OFFSET_W 2 //位移宽度
`define ByteOffsetBus 1:0 //位移总线
`define WordAddrLoc 31:2 //字地址位置
`define ByteOffsetLoc 1:0 //字节位移位置
`define BYTE_OFFSET_WORD 2'b00 //字边界
`endif
6.专栏目录(在更新)
《从0开始设计和实现CPU》32寄存器堆_记录篇(1)
《从0开始设计和实现CPU》总线设计(一)之总线仲裁器的实现
《从0开始设计和实现CPU》总线设计(二)之总线主控多路复用器的实现
《从0开始设计和实现CPU》总线设计(三)之地址解码器的实现
《从0开始设计和实现CPU》总线设计(四)之总线从属多路复用器的实现