# verilog-psm6 **Repository Path**: yuan_hp/verilog-psm6 ## Basic Information - **Project Name**: verilog-psm6 - **Description**: 这是一个 kcpsm6 的复刻版,与官方的版本相比,这是一个使用完全verilog描述的,没有使用到任何FPGA的IP核,这意味着他可以在任何FPGA上运行,而不需要任何FPGA的IP核。此外这个版本删除了HWBUILD sX的支持,其他的功能都和官方的版本一样。 - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-05-28 - **Last Updated**: 2025-06-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: Verilog, CPU, picoblaze6, mcu ## README # 说明 这是一个 kcpsm6(picoblaze6) 的复刻版,与官方的版本相比,这是一个使用完全verilog描述的,没有使用到任何FPGA的IP核,这意味着他可以在任何FPGA上运行,而不需要任何FPGA的IP核。此外这个版本删除了HWBUILD sX的支持,其他的功能都和官方的版本一样。 当然由于这是一个复刻版,所以可能会有一些bug,如果你发现了bug,欢迎提issue。 # 资源占用 我在quartus上进行测试,由于quartus的memory不支持异步输出,使用异步输出会使用逻辑资源生成模拟的memory,所以本版本引入了`define PSM_JP_NUM 4`,用于设置节拍数,官方默认为两个时钟周期,在quartus上设置为4个时钟周期,资源占用如下: | 资源 | 占用 | | ---- | ---- | | Total logic elements | 361/114480(<1%) | | Total registers | 67 | | Total memory bits | 2944/3981312 | > 注意:如果启用了`define PSM_JP_NUM 2`,和官方相比,大部分的指令可正常使用,但是 call@ 和 jump@ 指令是会出错的,两个节拍下不设置RAM异步输出,导致跳转会出错,其他的指令都是正常的。 # 基本指令测试 提供make test指令测试基本的指令,测试结果如下所示: ```console TEST load.psm success TEST output.psm success TEST load.psm success TEST output.psm success TEST star.psm success TEST output.psm success TEST star.psm success TEST and.psm success TEST star.psm success TEST and.psm success TEST and.psm success TEST or.psm success TEST or.psm success TEST xor.psm success TEST add.psm success TEST sub.psm success TEST test.psm success TEST compare.psm success TEST shift.psm success TEST input-output.psm success TEST store-fetch.psm success TEST interrupt.psm success TEST jump.psm success TEST call-return.psm success ``` # 工程仿真 文件夹 cpsm 下放的是基于 pbccv2 的仿真工程,cpsm 文件夹下的 cpsm 文件夹下放的是基于 汇编 的仿真工程。例如需要仿真 `cpsm/cpsm_soc` ,可以直接执行 `make cpsm_soc` 命令,执行结果如下所示: ```console Administrator@PC-20230414RCQN /c/g/S/1/0/verilog-psm6 (master)# make cpsm_soc ../cpsm/cpsm_soc/cpsm_soc.c:9: warning 126: unreachable code ../cpsm/cpsm_soc/cpsm_soc.c:9: warning 126: unreachable code OPBASM - Open PicoBlaze Assembler 1.3.10 Target architecture: PicoBlaze-6 Device configuration: Memory size: 4096, Scratchpad size: 256 Reading source: cpsm_soc.asm (m4) Assembling code... Beginning optimizations... Static analysis: searching for dead code... COMPLETE Entry points: 0x000, 0xFFF 0 dead instructions found SUCCESS 82 instructions out of 4096 (2%) Highest occupied address: FFF hex Writing output mem map: cpsm_soc.mem log file: cpsm_soc.log Formatted source: cpsm_soc.fmt iverilog -o build/tb.vvp -y ./rtl -y ./cpsm/cpsm_soc cpsm/cpsm_soc/tb.v ./cpsm/cpsm_soc/cpsm_soc.v:147: warning: Port 8 (interrupt_o) of bus_isr expects 8 bits, got 1. ./cpsm/cpsm_soc/cpsm_soc.v:147: : Padding 7 high bits of the port. --- sim --- Preloading tb.u_cpsm_soc.psm_soc_u1 from cpsm_soc.hex VCD info: dumpfile wave.vcd opened for output. -------- cpsm_soc sim ---------- 70000 ns | isr=0x55 310000 ns | gpio0= 0 390000 ns | led= 0 -------------- clear interrupt -------------- 4030000 ns | isr=0xaa ``` # 汇编器 本版本使用了opbasm作为汇编器,opbasm是一个基于m4的汇编器,m4是一个语法预编译器,能够生成PSM的汇编。 opbasm m4 语法:http://kevinpt.github.io/opbasm/rst/m4.html m4 是一个语法预编译器,能够生成PSM的汇编 ​