用verilog写一个最简单的CPU

这篇博客介绍了一个使用Verilog编写的最简单CPU设计,包括了基本的输入时钟、复位控制、输出以及程序和数据存储器。CPU通过读取16位指令并执行如加载、加法、输出等操作。设计可以使用QuartusII进行编译和下载验证,并提供了相关参考书籍和作者信息。

//最简单计算机核设计 2009-4-29(可下载到开发板验证)
//可以用QuartusII编译下载 
//解释权姜咏江 Email:accsys@126.com,
//参考书:姜咏江.PMC计算机设计与应用.清华大学出版社.2008-5

//基本输入时钟clock
//复位控制:reset_n,低电位有效
//基本输出:o
//程序存储器iram,16位,高5位是类指令代码,用imem16.mif初始化
//数据存储器dram,16位,不用数据文件初始化
//用lpm存储器地址信号要稳定1拍,才可以读写数据

//指令格式:高5位指令代码,11位地址码,16位立即数(分高低8位)

module test
    (
        clock,
        reset_n,
        o,
        //调试输出(可以不要):
        opc,
        omar,
        ojp,
        oqw,
        olda,
        oadd,
        oout
    );

    input    clock;
    input    reset_n;
    output [15:0]    o;
   
    output [15:0]    oqw;
    output [10:0]    opc,omar;
    output [2:0]    ojp;
    output            olda,oadd,oout;
   
    wire dwren;
    wire [15:0] q_w;
    wire [15:0] q_data;
    reg     [15:0]    b,a,ir,da,oo,ddata;
    reg  [10:0]    pc,mar;
    reg  [2:0]    jp;        //节拍
    reg            dwrit;    //写控制
//指令:
    reg         lda,    //取数:从数据单元取数到da
                add,    //加:da与数据单元相加,结果放入da
                out,    //输出:将数据单元内容输出到输出寄存器
                sdal,    //低8位立即数:将8位立即数扩充为16位送da
                sdah,    //高8位立即数:将8位立即数作为高8位,与原da低8位连接成16位放在da中
                str;    //da送数据存储单元:
//仿真信号输出:
    assign o    = oo;
    assign opc  = pc;
    assign omar = mar;
    assign ojp    = jp;
    assign oqw    = q_w;
    assign old

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值