模型机设计(VERILOG)-连接与验证

一.组件连接

完成模型机所有组件的设计后可以开始进行部件连接。只需要按照模型机结构将部件按端口连接,其中相邻的部件的数据传输线路、总线都可以直接连接,控制信号等由于部件不相邻,距离较远,建议采用端口命名的方式进行连接。

1.添加部件

        首先创建一个新的工程。
        先在工程文件中加入各部件的.v文件。

        逐个为部件创建符号。

         创建完成后,新建一个BDF文件,然后就可以在bdf图中使用这些部件了。

2.连接

        指令存储部分,RAM是元件库中的一个元件,不需要我们设计,只需要更改并去除多余的端口(properties-ports中将不需要的端口设置为unused)。

        指令译码和控制信号部分。

        运算部分数据通路,状态寄存器的输入cf是ALU的cf和移位逻辑的相或。

        整体连接:

        左侧连接到总线的是输入输出端口。
        连接后的编译结果(资源消耗):

二.验证

1.验证方式

        模型机执行的指令存放在RAM中,并按地址单元进行存储,通过设计RAM中的数据,进行指令的验证。其中RAM的指令存放在.mif文件内,如下:

        验证指令执行正确的方式是查看数据结果。新建vwf波形文件,添加需要查看的数据,注意图中圈出的部分,如果是PINS:选项则只能查看模型机与外部连接的端口,只有in,out,clk,更改这个选项就可以找到其他已经连入的端口和寄存器。


        这里为了方便验证,找出了clk,sm,in,out,寄存器a,b,c,状态c,z,和输入RAM的地址add,并把add设置为10进制,查看指令地址单元更加方便。

 2.测试代码

        为了测试给寄存器c初值(.v文件中用initial语句赋初值):01100000(这个值任意,给哪个寄存器赋初值或不赋初值都任意,只要结果是和设计的程序执行后的结果相同就算验证成功)
        使用如下指令进行测试,共16个指令,加上JZ,JC执行不成功共20种情况,增加两次输出便于观察结果,共执行20个指令,停机后的OUT指令不执行。

 3.测试结果

波形结果


        JMP跳转后计数器中指令地址变为4,验证正确。向A寄存器IN指令写入OUT指令输出数据11000000验证正确。


       将寄存器A中数据写入存储器地址01100000(寄存器C的初值),再写给寄存器B,A=B,MOVB,MOVC指令正确,JZ跳转不成功,pc+1,验证正确。


       执行SUB指令,A-B=0,Z=1,JZ跳转成功,地址跳转至16,执行NOT指令,A=11111111,三条指令执行验证正确。


        执行AND A C,A=A&C=01100000,AND指令验证正确,JC跳转不成功,PC+1。执行ADD A B,A=A+B=01100000+11000000(转移指令后,B为IN指令时输入的A),运算结果A=00100000,C=1,验证正确。此时执行JC,地址载入为64,验证正确。


       跳转后执行空指令后,RSR指令将A中数据右移一位,A=00010000,输出,验证正确。


       RSL指令将B中数据左移一位,B=10000001,验证正确。MOVA A B将B中数据移给A并输出,验证正确。HALT停机指令后,sm=1,不再翻转,验证正确。

下载验证:

       共有三次输出寄存器A的数据,第一次输出为11000000,第二次输出为00010000,第三次输出为10000001。将时钟频率调低,下载进行验证,验证正确。
 

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值