# verilog-mcl51 **Repository Path**: yuan_hp/verilog-mcl51 ## Basic Information - **Project Name**: verilog-mcl51 - **Description**: verilog-mcl51是MCL51的使用整理,51单片机的指令集,占用资源较少 - **Primary Language**: Unknown - **License**: Artistic-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-14 - **Last Updated**: 2025-08-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: Verilog, 8051, mcu, 51单片机 ## README # verilog-mcl51 ## 项目概述 这个项目是配置MCL51这个软8051的工具链,涵盖了硬件和软件部分,硬件仿真基于iverilog,软件开发基于SDCC,整个项目使用Makefile进行组织。 项目的RTL中对原有的MCL51结构进行了调整,将pxy外设扩展接口引出,外部使用总线进行连接,这样做的好处是可以方便地扩展外设,而不需要修改原有的MCL51结构。 软件开发基于SDCC的51环境,但是由于MCL51的设计不是完整的51内核,且引入了外设总线,因此实际编程时需要根据MCL51的实际逻辑结构进行过编程,否则不保证功能符合预期。 ## 环境要求 - **硬件**:支持 Verilog 综合的 FPGA 开发板(如 Arty Artix-7) - **软件**: - Icarus Verilog(仿真工具) - GTKWave(波形查看工具) - SDCC(C 编译器) - Python 3(用于生成 hex 文件) - Bash (用于修正中断向量表) ## 目录结构 ```bash verilog-mcl51/ ├── Makefile # 项目构建脚本 ├── isr.sh # 中断向量表修正脚本 ├── rtl/ # Verilog 硬件描述文件 │ ├── MCL51_top.v # MCL51顶层模块 │ ├── biu.v # 总线接口单元 │ ├── eu.v # 执行单元 │ ├── timer.v # 定时器模块 │ ├── tb.v # 测试平台 │ ├── pxy_bus_mux.py # 用于生成指定个外设端口的总线分线器 | ├── top.v # 基于简单总线的mcl soc 顶层文件 │ └── ... # 其他模块文件 ├── soft/ # 软件开发相关文件 │ ├── timer/ # 定时器示例程序 │ ├── hello/ # 简单示例程序 │ └── ... # 其他软件文件 └── ... # 其他文件 ``` # 快速开始 ## 仿真 使用 make 指令会自动编译软件,并进行仿真,若果需要指定仿真的软件,可以使用如`make SOFT_DIR=soft/hello ` 指令,这将会编译soft/hello 目录下的软件,并且进行仿真。 ## 上板验证 项目提供一个在 icesugar-nano 上运行的demo,该FPGA包含1K的逻辑资源,由于该FPGA的资源较少,因此该项目的软件也做了一定的限制,软件的大小不能超过2K,最高时钟频率为24MHz。 示例依赖于开源工具链。我们可以使使用 `make SOFT_DIR=soft/blink sugar` 来配置FPGA为闪灯程序。配置完毕后,FPGA的资源消耗如下所示: ```bash Info: Device utilisation: Info: ICESTORM_LC: 988/ 1280 77% Info: ICESTORM_RAM: 13/ 16 81% Info: SB_IO: 2/ 112 1% Info: SB_GB: 8/ 8 100% Info: ICESTORM_PLL: 0/ 1 0% Info: SB_WARMBOOT: 0/ 1 0% ``` # 相比MCL51原版的变动点 - 将外设接口引出 - 将中断改为带上升沿触发,并将中断引出,但若多个中断同时来,只会响应高优先级的中断 - 删除了内置的串口和定时器 - 由于采用速度换空间,中断中不能做复杂处理,中断来临只做标志置位,快速退出中断