verilog写操作查询表_从零开始写RISC-V处理器【3】硬件篇(1)

本文介绍了RISC-V处理器tinyriscv的硬件设计,包括其整体框架、各模块的功能,如PC寄存器、寄存器、取指和译码过程。tinyriscv已发展为包含简单外设的小型SOC,具有JTAG调试信号。文中详细阐述了PC寄存器、通用寄存器的读写操作,以及取指和译码的逻辑实现。
摘要由CSDN通过智能技术生成

692651d6638a06a6fbed865ee4091c0c.png

【注】本项目作者:liangkangnan

项目地址:

liangkangnan/tinyriscv​gitee.com
8b9c5b08057571e546fa372189b5ea4f.png

本文首发于公众号【ZYNQ】,ID:FreeZynq;整理者:WatchmanLee;

【数字积木】授权发布。


4.1 tinyriscv整体框架

硬件篇主要介绍tinyriscv的verilog代码设计。

tinyriscv整体框架如图2-1所示。

6c565f2e5aa560600bd006d24b82c8b2.png

图2-1 tinyriscv整体框架

可见目前tinyriscv已经不仅仅是一个内核了,而是一个小型的SOC,包含一些简单的外设,如timer、uart_tx等。

tinyriscv SOC输入输出信号有两部分,一部分是系统时钟clk和复位信号rst,另一部分是JTAG调试信号,TCK、TMS、TDI和TDO。

上图中的小方框表示一个个模块,方框里面的文字表示模块的名字,箭头则表示模块与模块之间的的输入输出关系。

下面简单介绍每个模块的主要作用。

jtag_top:调试模块的顶层模块,主要有三大类型的信号,第一种是读写内存的信号,第二种是读写寄存器的信号,第三种是控制信号,比如复位MCU,暂停MCU等。

pc_reg:PC寄存器模块,用于产生PC寄存器的值,该值会被用作指令存储器的地址信号。

if_id:取指到译码之间的模块,用于将指令存储器输出的指令打一拍后送到译码模块。

id:译码模块,纯组合逻辑电路,根据if_id模块送进来的指令进行译码。当译码出具体的指令(比如add指令)后,产生是否写寄存器信号,读寄存器信号等。由于寄存器采用的是异步读方式,因此只要送出读寄存器信号后,会马上得到对应的寄存器数据,这个数据会和写寄存器信号一起送到id_ex模块。

id_ex:译码到执行之间的模块,用于将是否写寄存器的信号和寄存器数据打一拍后送到执行模块。

ex:执行模块,纯组合逻辑电路,根据具体的指令进行相应的操作,比如add指令就执

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值