微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于VHDL语言的IP核验证

基于VHDL语言的IP核验证

时间:07-18 来源:互联网 点击:

2.4 IP核的测试仿真
  
综上所述,下面给出RISC 8测试仿真实例。该测试仿真大致可分为5个步骤
  
(1)给Wave(波形)窗口添加信号。首先添加的是RISC 8的整体Structure(结构)信号。
  
(2)行为级仿真初步测试。在初步测试中.“portb”信号的输出如果是“FX”,则说明系统必然存在问题;如果是“OX”则说明系统没有发现问题要进行进一步的测试。
  
(3)行为级仿真进一步测试。在进一步测试中,要注意的信号是romaddr、romdata以及各种指令控制信号。
  
(4)源程序修改,再仿真。在上一步中定位到出错的地方,然后回到源程序中找到所有出错信号出现的地方,仔细分析,并结合波形图进行修改,然后重复上述步骤进行再仿真。
  
(5)布图布线后的仿真(后仿真)。事实上在行为级仿真与后仿真之间还有3个仿真过程,但一般来说只要能通过后仿真则其他的仿真也就没有问题。
  
在后仿真过程中,看一下“portb”的输出是否与行为级仿真一致,若一致则测试通过。如果不一致则必须返回原程序和行为级仿真,对时序进行仔细分析(因为这种情况大都是因为加入延迟后原来的时序发生改变)。
     
3 IP核在RISC架构中的下载实例
  
3.1 RISC处理器的选择与指令的测试
  
我们选用MICrochip公司生产的PICl6c5x-Xilinx Spartan2系列中的Xc2s150微处理器下载.因为其FPGA芯片架构指令与8位RISC兼容.能够很容易实现RISC架构之指令集。
  
RISC的测试激励文件是由汇编语言测试程序翻译而得到的.例如Test3程序测试循环移位.test5测试逻辑操作指令、test8测试端口等。
  
testl程序是测试incf和的decf指令的.行为级初步测试中,“portb”输出为“01”,如3.3中所述,这并不能说明没有问题接着做行为级进一步测试
  
3.2 测试激励程序的加载步骤与验证
  
选择“Project”莱单中的“News Source”选项,在弹出的“New”对话框左侧选择文件类型为“Test Bench Waveform”,填入文件名,单击下一步,在弹出的“select”对话框中选择关联的源为“anss_risc8_top”,单击下一步.然后单击“Finish”后会启动HDL Bencher.在这个软件环境中可以输入激励信号最后将由汇编测试程序翻译过来的机器码信息作为激励信号输入保存.输入测试时间后退出HDL Benche。
  
在进一步测试中也没有问题,然后,我们可将测试程序进行如下改变.
    incf x,f:X<=FE
    incf x,f;X<=FF
    incf x,f:X<=00
    incf x,f;X<=01
    decf x,f:X<=00
    decf x,f:X<=FF
    decf x,f:X<=FE将程序中的最后一个incf改为的decf.这样制造了一个错误.重新进行仿真,发现"portb"的输出仍然为"01"而不是预想的"F1"。由此可见程序中存在问题。仔细分析后发现问题出现在“btfss”变为1时.此时alu_z为1而实际上它应该是0。由于alu_z出现在算术逻辑运算模块ALU的一个子模块alu_dp中,因此对alu_dp进行分析,在wave窗口中加入alu_dp模块的信号,同时在ISE4.1i中打开alu_dp的源文件进行分析.经分析发现alu_z变为1是由于源程序中对alu_z的处理不完备.少考虑了一种情况。根据这种情况对源程序alu_dp.vhd进行修改如下:

  a.signal bittest,temp:std_logIC_vector(7 downto 0);
    --add signal temp
    b.u_zero:process(bittest,op,longq)
    begin
    if(bittest=ZEROBYTE)  and&n
bsp; (op=ALU_OP_BITTESTCLR)
    then zero<='1';
    elsif(bittest/=ZEROBYTE)  and  (op=ALU_OP_BITTESTSET)
    then zero<='1';
    elsif longq(7 downto 0)=ZEROBYTE and(op/=ALUOP_BITTESTSET)
    then zero<='1';--new add
    elsif temp="zerobyte" and op="ALUOP"_BITTESTSET
    then zero<='1';--new add
    else
    zero<='0';
    end if;
    end process;
    c.bittest<=bitdecoder and a;
    temp<=bitdecoder or a; --new add
  
修改存储源程序后再次仿真的结果是正确的(即portb输出为“F1”)。将测试程序恢复,仿真结果也是正确的。再进行后仿真也正确.至此.test1程序测试完毕。
  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top