一.准备工作

先看看书(《计算机原理与设计 Verilog HDL版》),搞懂一点原理。然后照着书上的代码写一写(用8.4的就可以了,不用8.6的)。

注意mux2x32,mux4,cla32等可以用单周期的mux,alu。 (cla32就是个加法器,)

然后dffe32在书上前几章也有。

pipeimem即为im指令存储器,可以套用单周期的IM。

pipemem是数据存储器,可以套用单周期的dm

regfile 可以套用单周期的RF。

alu可以完全套用单周期的alu。pipecu中的aluc,rij型的wire,以及wreg中的一部分都可以套用单周期的代码。只是注意要调整好,不要多写,少写,导致错误。(我犯过错误就是,alu的功能与pipecu的aluc不一致,少写了一些东西,导致数据读入都出问题。)

需要理解流水线cpu的各种问题及解决对策。

比如lw指令从memory读到register,在mem级才可以前推(forward)到id级,这样如果下一条指令要用到寄存器的 结果,需要阻塞(stall)一周期,否则已经进入了exe级了而书上示例的cpu只能forward到id级。

这里补充一点,用了8.4的代码,然后为了消除控制冒险,要在mars的测试文件(.asm)中,每一条J型指令后加一个nop。这里是因为看8.2.2,采用了延迟槽技术,i指令是跳转类指令,i+1无论如何都会被执行。(提前到在ID级判断是否要跳转),这里加nop,刚好取代了i+1。

二.调整接口&&细节调整

写完代码,modelsim编译成功。(或者有问题,按照transcript的提升改一改)。

然后start simulation、

simulation失败,提升error loading design。

error loading design的原因基本上是:模块名错误(定义的和使用的。),参数错误(接口错误,比如参数顺序不一致,参数宽度不一致)

注意网上看error loading design很多都说没有提示,这是误导了。(导致我自己不看提示改了一天,虽然确实也改好了一些吧)确实提示不多,但是modelsim transricpt 在start simulation 后也会有一些error提示的

Error: (vsim-3043) E:/pipe3/pipelinecomp_tb.v(55): Unresolved reference to 'ID' in U_SCCOMP.U_SCPU.ID.

这个就提示ID不知道是啥。

然后我看了一下pipelinecpu中,pipeid 起名id_stage ,而不是ID。把ID改成id_stage就完事了

调整接口很困难(对我来说)。要细心。

比如clrn就是rest等等,需要理解后替换。

比如因为仍然使用了单周期的顶层例化文件,comp中cpu模块只有一个aluout的例化,那么就不能按照8.4的代码在module cpu里ealu,malu,walu三个输出。其中walu,ealu改为wire型。malu改名为aluout,仍保留为输出。

还有pipemem(即为DM,data'memory)因为在comp中例化,就不需要像8.4中一样在module pipelinecpu中使用了。

还有许多细节,需要自己摸索。

三.效果

还是学号排序,应该是成功了

放错图了

这是mars setting momeryconfiguration text at address,然后assemble,然后dump的结果。

 

正确的图

先设置mars setting momeryconfiguration data at address,assemble,不要运行,dump,然后仿真的结果

单周期的时候也是这么设置的,一开始忘记了...

 

流水线cpu —Verilog HDL的更多相关文章

  1. 流水线技术原理和Verilog HDL实现(转)

    源:流水线技术原理和Verilog HDL实现 所谓流水线处理,如同生产装配线一样,将操作执行工作量分成若干个时间上均衡的操作段,从流水线的起点连续地输入,流水线的各操作段以重叠方式执行.这使得操作执 ...

  2. [转载]【转】乘法器的Verilog HDL实现

      乘法器如果直接用*来实现的话,会消耗很多的资源.所以有了串行和并行两种实现思路.用串行的话,8位一般会有8位以上的延迟,但是消耗的资源是最少的.低速数据处理比较适合.并行也就是流水线方法,以时间换 ...

  3. 基于Verilog HDL整数乘法器设计与仿真验证

    基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...

  4. 关于初次使用Verilog HDL语言需要懂的基本语法

    关于初次使用Verilog HDL语言需要懂的基本语法 1.常量 数字表达式全面的描述方式为:<位宽><进制><数字> 8’b10101100,表示位宽为8的二进制 ...

  5. FPGA Verilog HDL 系列实例--------步进电机驱动控制

    [连载] FPGA Verilog HDL 系列实例 Verilog HDL 之 步进电机驱动控制 步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心.那么,下面我 ...

  6. Verilog HDL基础语法讲解之模块代码基本结构

    Verilog HDL基础语法讲解之模块代码基本结构   本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的 ...

  7. Verilog HDL模块的结构

    一个设计是由一个个模块(module)构成的.一个模块的设计如下: 1.模块内容是嵌在module 和endmodule两个语句之间.每个模块实现特定的功能,模块可进行层次的嵌套,因此可以将大型的数字 ...

  8. 写自己的第二级处理器(3)——Verilog HDL行为语句

    我们会继续上传新书<自己动手写处理器>(未公布),今天是第七章,我每星期试试4 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包含有过程语句,过 ...

  9. 基于Verilog HDL 各种实验

    菜鸟做的的小实验链接汇总:           1.基于Verilog HDL 的数字时钟设计 2.乘法器 3.触发器(基本的SR触发器.同步触发器.D触发器) 4.基于Verilog HDL的ADC ...

随机推荐

  1. java 利用异或^进行加密

    package com.zcj.eg001; import java.nio.charset.Charset; import org.junit.Test; public class Encrypti ...

  2. (数据科学学习手札104)Python+Dash快速web应用开发——回调交互篇(上)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  3. 1.5V转5V的最少电路的芯片电路图

    PW5100满足1.5V转5V的很简洁芯片电路,同时达到了最少的元件即可组成DC-DC电路1.5V转5V的升压转换器系统. PW5100在1.5V转5V输出无负载时,输入效率电流极低,典型值10uA. ...

  4. Java 迭代器的使用 Iterator

    Java的集合类可以使用for ... each循环 List Set Queue Deque 我们以List为例 其实一个java编译器并不知道如何遍历一个List 编译器只是把一个for ... ...

  5. JS复习笔记一:冒泡排序和二叉树列

    在这里逐步整理一些JS开发的知识,分享给大家: 一:冒泡排序 使用场景:数组中根据某个值得大小来对这个数组进行整体排序 难度:简单 原理:先进行循环,循环获取第一至倒数第二的范围内所有值,对当前值与下 ...

  6. JVM(八)执行引擎相关内容

    一:两种解释器 JAVA字节码解释器: java字节码===>c++代码==>硬编码. 首先.java文件编译成字节码,遍历每行的字节码指令,因为每个字节码指令的含义都是固定的所以可以根据 ...

  7. 网络编程 — Windows TCP服务端和客户端

    1. 服务端 #include <iostream> #include <signal.h> #include <forward_list> #include &l ...

  8. It is thread-safe and idempotent, but not reentrant.

    https://github.com/django/django/blob/master/django/apps/registry.py

  9. (010)每日SQL学习:按字母顺序排列字符串

    需求:一串字母'ADFGH',需要按照顺序来显示:A D F G H 第一步:先把字符串拆分 with test as( select 'ADFGH' as a from dual ) select ...

  10. 后端API接口的错误信息返回规范

    前言 最近我司要制定开发规范.在讨论接口返回的时候,后端的同事询问我们前端,错误信息的返回,前端有什么意见? 所以做了一些调研给到后端的同事做参考. 错误信息返回 在使用API时无可避免地会因为各种情 ...