# tiny-soc **Repository Path**: pan-xingyu/tiny-soc ## Basic Information - **Project Name**: tiny-soc - **Description**: This is a tiny soc with tiny 8bit cpu - **Primary Language**: Verilog - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2021-11-04 - **Last Updated**: 2022-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: CPU, SoPC, Verilog ## README # tiny-soc #### 介绍 This is a tiny soc with tiny 8bit cpu #### CPU 本项目基于自定义指令集设计了一颗8bit处理器——C108内核,此CPU仅占用约300LE,CPU的源代码见“./src/CPU/”目录下,关于此指令集的手册可以参考“./doc/Instruction_set.docx” ``` ├─cpu │ alu.sv //算数逻辑单元 │ biu.sv //总线接口单元 Bus Interface Unit │ biu.sv.bak │ c108_config.sv //CPU config文件,可以更改复位地址、栈位置、中断入口地址、仿真时的打印信息 │ c108_define.sv //CPU define文件,包含了ALU opcode、指令type编码,最好不要动 │ c108_top.sv //CPU 顶层文件 │ c108_top.sv.bak │ cu.sv //Control Unit 控制单元 │ cu.sv.bak ``` #### SoC架构 基于上述CPU,我们设计了一个SoC,SoC的文件见:(SoC暂未完工) #### 使用说明 ##### 运行仿真 1. 使用任一支持system verilog的仿真软件,添加参与综合的文件如下所示: ``` ├─bin │ add_test.s │ add_test.txt │ hello.s │ hello.txt │ ├─rtl │ │ a.out │ │ c108_soc.sv │ │ │ ├─cpu │ │ alu.sv //需要添加 │ │ biu.sv //需要添加 │ │ biu.sv.bak │ │ c108_config.sv //需要添加 │ │ c108_define.sv //需要添加 │ │ c108_top.sv //需要添加 │ │ c108_top.sv.bak │ │ cu.sv //需要添加 │ │ cu.sv.bak │ │ │ └─peripheral │ │ fsb8.v │ │ tiny_spi.v │ │ │ └─uart │ SyncStreamFIFO.v │ uart_raw.v │ uart_rx.v │ uart_tx.v │ └─simrtl cputb.sv //需要添加 memory.sv //需要添加 ``` 2. 添加仿真用的二进制文件 默认情况下,cputb中使用的内存初始化文件是"src/bin/hello.txt",如果需要更改其他的内存初始化文件,需要在cputb.sv文件更改“readmemh();”函数中初始化文件的名称。 ##### 自己编写程序 目前还没有汇编器,人工汇编。 ##### 裁剪SoC 未完待续 #### 总线 为了最大程度的降低soc的实现开销,我们将总线设计成兼容于wishbone/APB4总线的时序结构,方便接驳外设和自己写外设。 自行实现的外设需要满足如下时序信息: 1. 强烈建议的:一次访问最短2个cycle,当然也可以在一个cycle内给出ready信号,但是会造成时序的下降。 2. 为了方便实现,本处理器在每2个总线访问之间必定会有空闲cycle,即master_ce=0,master_wr=0。 ##### 读时序 在每2个读写之间,必定会有一个cycle的总线空闲周期。 以CPU端的时序: ``` clk :__/--\__/--\__/--\__/--\__/--\__/-- master_addr :--< ADDR >-----< ADDR > master_wdata:--------------------------------- master_rdata:------------------- master_ce :__/-----------\_____/-----------\ master_wr :_________________________________ master_ready:________/-----\___________/-----\ ``` ##### 写时序 ``` clk :__/--\__/--\__/--\__/--\__/--\__/-- master_addr :--< ADDR >-----< ADDR > master_wdata:--< DATA >-----< DATA > master_rdata:--------------------------------- master_ce :__/-----------\_____/-----------\ master_wr :__/-----------\_____/-----------\ master_ready:________/-----\___________/-----\ ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request