8位RISCCPU的编写(6)

2019-04-09 13:05

第八章 可综合的Verilog HDL设计实例

----------------------------------------------------------------------------------------------------------------------

0000_0000

110_11000 // 18 STO TEMP //store zero value in TEMP 0000_0010

101_11000 // 1a LDA TEMP 0000_0010

001_00000 // 1c SKZ //check to see if STO worked 0000_0000

000_00000 // 1e HLT //STO did not work 0000_0000

100_11000 // 20 XOR DATA_2 0000_0001

001_00000 // 22 SKZ //check to see if XOR worked 0000_0000

111_00000 // 24 JMP XOR_OK 0010_1000

000_00000 // 26 HLT //XOR did not work at all 0000_0000

100_11000 // 28 XOR_OK: XOR DATA_2 0000_0001

001_00000 // 2a SKZ 0000_0000

000_00000 // 2c HLT //XOR did not switch all bits 0000_0000

000_00000 // 2e END: HLT //CONGRATULATIONS - TEST1 PASSED! 0000_0000

111_00000 // 30 JMP BEGIN //run test again 0000_0000

@3c

111_00000 // 3c TST_JMP: JMP JMP_OK 0000_0110

000_00000 // 3e HLT //JMP is broken //-----------------------------test1.pro的结束--------------------------------------------

/******************************************************************************************* 下面文件中的数据在仿真时需要用系统任务$readmemb读入RAM,才能被上面的汇编程序test1.pro使用。 *********************************************************************************************/ //------------------------------test1.dat开始------------------------------------------------

@00 //address statement at RAM 00000000 // 1800 DATA_1: //constant 00(hex) 11111111 // 1801 DATA_2: //constant FF(hex)

10101010 // 1802 TEMP: //variable - starts with AA(hex) //------------------------------test1.dat的结束-------------------------------------------

/****************************************************************************** * Test 2程序是用于验证RISC_ CPU的功能, 是设计工作的重要环节

* 本程序测试RISC_ CPU的高级指令集,如果RISC_ CPU的各条指令执行正确, * 它应在地址为20(hex)处,在执行HLT时停止运行。

* 如果该程序在任何其他地址暂停运行,则必有一条指令运行出错。 * 可参照注释找到出错的指令。

* 注意:必须 先在RISC_ CPU 上运行 test1程序成功后,才可运行本程序。

*****************************************************************************/

机器码 地址 汇编助记符 注释

//-------------------------------test2.pro开始-------------------------------------------------------------------- @00

196

第八章 可综合的Verilog HDL设计实例

----------------------------------------------------------------------------------------------------------------------

101_11000 // 00 BEGIN: LDA DATA_2 0000_0001

011_11000 // 02 AND DATA_3 0000_0010

100_11000 // 04 XOR DATA_2 0000_0001

001_00000 // 06 SKZ 0000_0000

000_00000 // 08 HLT //AND doesn't work 0000_0000

010_11000 // 0a ADD DATA_1 0000_0000

001_00000 // 0c SKZ 0000_0000

111_00000 // 0e JMP ADD_OK 0001_0010

000_00000 // 10 HLT //ADD doesn't work 0000_0000

100_11000 // 12 ADD_OK: XOR DATA_3 0000_0010

010_11000 // 14 ADD DATA_1 //FF plus 1 makes -1 0000_0000

110_11000 // 16 STO TEMP 0000_0011

101_11000 // 18 LDA DATA_1 0000_0000

010_11000 // 1a ADD TEMP //-1 plus 1 should make zero 0000_0011

001_00000 // 1c SKZ 0000_0000

000_00000 // 1e HLT //ADD Doesn't work 0000_0000

000_00000 // 20 END: HLT //CONGRATULATIONS - TEST2 PASSED! 0000_0000

111_00000 // 22 JMP BEGIN //run test again 0000_0000

//-----------------------------test2.pro结束--------------------------------------------

/******************************************************************************************* 下面文件中的数据在仿真时需要用系统任务$readmemb读入RAM,才能被上面的汇编程序test2.pro使用。 *********************************************************************************************/ //------------------------------test2.dat开始------------------------------------------------

@00

00000001 // 1800 DATA_1: //constant 1(hex) 10101010 // 1801 DATA_2: //constant AA(hex) 11111111 // 1802 DATA_3: //constant FF(hex) 00000000 // 1803 TEMP:

//------------------------------test2.dat结束 .--------------------------------------------------

/************************************************************************************ * Test 3 程序是一个计算从0到144的Fibonacci 序列的程序,用于进一步验证RISC_ CPU的功能。 * 所谓Fibonacci 序列就是一系列数其中每一个数都是它前面两个数的和(如:0,1,1,2,3,5, * 8,13,21,………..)。 这种序列常用于财务分析。

* 注意:必须在成功地运行前两个测试程序后才运行本程序 。否则很难发现问题所在。

************************************************************************************/

197

第八章 可综合的Verilog HDL设计实例

----------------------------------------------------------------------------------------------------------------------

机器码

地址 汇编助记符 注释

//-------------------------------test3.pro开始--------------------------------------------------------------------

@00

101_11000 // 00 LOOP: LDA FN2 //load value in FN2 into accum 0000_0001

110_11000 // 02 STO TEMP //store accumulator in TEMP 0000_0010

010_11000 // 04 ADD FN1 //add value in FN1 to accumulator 0000_0000

110_11000 // 06 STO FN2 //store result in FN2 0000_0001

101_11000 // 08 LDA TEMP //load TEMP into the accumulator 0000_0010

110_11000 // 0a STO FN1 //store accumulator in FN1 0000_0000

100_11000 // 0c XOR LIMIT //compare accumulator to LIMIT 0000_0011

001_00000 // 0e SKZ //if accum = 0, skip to DONE 0000_0000

111_00000 // 10 JMP LOOP //jump to address of LOOP 0000_0000

000_00000 // 12 DONE: HLT //end of program 0000_0000

//-----------------------------test3.pro结束--------------------------------------------

/******************************************************************************************* 下面文件中的数据在仿真时需要用系统任务$readmemb读入RAM,才能被上面的汇编程序test3.pro使用。 *********************************************************************************************/ //------------------------------test3.dat开始------------------------------------------------

@00

00000001 // 1800 FN1: //data storage for 1st Fib. No. 00000000 // 1801 FN2: //data storage for 2nd Fib. No. 00000000 // 1802 TEMP: //temproray data storage

10010000 // 1803 LIMIT: //max value to calculate 144(dec) //-----------------------------test3.pro结束--------------------------------------------

以下介绍前仿真的步骤,首先按照表示各模块之间连线的电路图编制测试文件,即定义Verilog的wire变量作为连线,连接各功能模块之间的引脚,并将输入信号引入,输出信号引出。如若需要,可加入必要的语句显示提示信息。例如,risc_cpu 的测试文件就是cputop.v。其次,使用仿真软件进行仿真,由于不同的软件使用方法可能有较大的差异,以下只简单的介绍modelsim的使用。在进入modelsim的环境之后,在file项选择change direction来确定编制的文件所在的目录,然后在design项选择或创建一个library,完成后即可开始编译。在design项选compile…项,进入编译环境,选定要编译的文件进行编译。Modelsim的编译器语法检查并不严格,有时会出现莫名其妙的逻辑错误,书写时应注意笔误。完成编译后,还是在compile…项,选择load new design项,选中编译后提示的top module的名字,然后开始仿真。在view项可选波形显示,信号选择,功能和操作简单明了,这里就不一一赘述。

仿真结果如下: run -all #

# ****************************************************** # * THE FOLLOWING DEBUG TASK ARE AVAILABLE: * # * \# * \# * \

198

第八章 可综合的Verilog HDL设计实例

----------------------------------------------------------------------------------------------------------------------

# ****************************************************** #

# rom loaded successfully! # ram loaded successfully! #

# *** RUNNING CPUtest1 - The Basic CPU Diagnostic Program *** #

# TIME PC INSTR ADDR DATA # ---------- --- ----- ---- ----- # 1200.0 ns 0000 JMP 003c zz # 2000.0 ns 003c JMP 0006 zz # 2800.0 ns 0006 LDA 1800 00 # 3600.0 ns 0008 SKZ 0000 zz # 4400.0 ns 000c LDA 1801 ff # 5200.0 ns 000e SKZ 0000 zz # 6000.0 ns 0010 JMP 0014 zz # 6800.0 ns 0014 STO 1802 ff # 7600.0 ns 0016 LDA 1800 00 # 8400.0 ns 0018 STO 1802 00 # 9200.0 ns 001a LDA 1802 00 # 10000.0 ns 001c SKZ 0000 zz # 10800.0 ns 0020 XOR 1801 ff # 11600.0 ns 0022 SKZ 0000 zz # 12400.0 ns 0024 JMP 0028 zz # 13200.0 ns 0028 XOR 1801 ff # 14000.0 ns 002a SKZ 0000 zz # 14800.0 ns 002e HLT 0000 zz #

# *********************************************************** # * A HALT INSTRUCTION WAS PROCESSED !!! *

# *********************************************************** #

# Break at H:/seda/w/Cputop.v line 109 run -continue

# rom loaded successfully! # ram loaded successfully! #

# *** RUNNING CPUtest2 - The Advanced CPU Diagnostic Program *** #

# TIME PC INSTR ADDR DATA # ---------- ---- ----- ---- ----- # 16200.0 ns 0000 LDA 1801 aa # 17000.0 ns 0002 AND 1802 ff # 17800.0 ns 0004 XOR 1801 aa # 18600.0 ns 0006 SKZ 0000 zz # 19400.0 ns 000a ADD 1800 01 # 20200.0 ns 000c SKZ 0000 zz # 21000.0 ns 000e JMP 0012 zz # 21800.0 ns 0012 XOR 1802 ff # 22600.0 ns 0014 ADD 1800 01 # 23400.0 ns 0016 STO 1803 ff # 24200.0 ns 0018 LDA 1800 01

199

第八章 可综合的Verilog HDL设计实例

----------------------------------------------------------------------------------------------------------------------

# 25000.0 ns 001a ADD 1803 ff # 25800.0 ns 001c SKZ 0000 zz # 26600.0 ns 0020 HLT 0000 zz #

# *********************************************************** # * A HALT INSTRUCTION WAS PROCESSED !!! *

# *********************************************************** #

# Break at H:/seda/w/cputop.v line 111 run -continue

# rom loaded successfully! # ram loaded successfully! #

# *** RUNNING CPUtest3 - An Executable Program *** # *** This program should calculate the fibonacci *** #

# TIME FIBONACCI NUMBER # --------- ----------------- # 33250.0 ns 0 # 40450.0 ns 1 # 47650.0 ns 1 # 54850.0 ns 2 # 62050.0 ns 3 # 69250.0 ns 5 # 76450.0 ns 8 # 83650.0 ns 13 # 90850.0 ns 21 # 98050.0 ns 34 # 105250.0 ns 55 # 112450.0 ns 89 # 119650.0 ns 144 #

# *********************************************************** # * A HALT INSTRUCTION WAS PROCESSED !!! *

# *********************************************************** #

# Break at H:/seda/w/cputop.v line 112

在运行了以上程序后,如仿真程序运行的结果正确,前仿真(即布局布线前的仿真)可告结束。

8.5.2. RISC_CPU模块的综合

在对所设计的RISC_CPU模型进行验证后,如没有发现问题就可开始做下一步的工作即综合。综合工作往往要分阶段来进行,这样便于发现问题。

所谓分阶段就是指:

200


8位RISCCPU的编写(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:道路运输企业自查报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: