初接触到CPU(处理器)的实现,有很多东西需要先学习一下,才能了解其中的原理,更好地实现它。首先,你需要深入了解MIPS指令集,理解其各个指令的执行过程;其次,你需要掌握Verilog语言的使用,理解模块化思想,有点类似C++,不是很难。

  首先,我们先开始学习之旅。简单地学习,是为了后面更流畅地动作。
  
▶MIPS32指令集架构简介
学习链接:http://blog.csdn.net/leishangwen/article/details/37738343
学习重点:
- 数据类型
- 寄存器
- 指令格式
- 指令集

▶了解PLD与HDL
学习链接:http://blog.csdn.net/leishangwen/article/details/37760199
学习重点:
- PLD 可编程逻辑器件
- HDL 硬件描述语言(与PLD关系)

▶Verilog HDL语言的学习
学习链接:http://blog.csdn.net/leishangwen/article/details/37814749
学习重点:
- Module介绍
- 基本要素:常量、 变量声明与数据类型、 运算符

笔记:

net型变量之wire
wire是最常用的net型变量,Verilog HDL模块中的输入、输出信号在没有明确指定数据类型时,都被默认为wire型。wire型信号可以用作任何表达式的输入,也可以用作assign语句和实例元件的输出,如前文中的32位加法器对out信号的赋值。对于综合器而言,wire型变量的取值可为0、1、X、Z,其中0表示低电平、逻辑0;1表示高电平、逻辑1;X表示不确定或未知的逻辑状态;Z表示高阻态。如果没有赋值,默认为高阻态Z。

variable型变量
  variable型变量是可以保存上次写入数据的数据类型,一般对应硬件上的一个触发器或锁存器等存储元件,但并不是绝对的,在综合器综合的时候,会根据其被赋值的情况来具体确定是映射成连线还是映射为存储元件。
  variable型变量必须在过程语句(initial或always)中实现赋值,这种赋值方式称为过程赋值
  常用类型为reg类型。

▶补充知识点

Verilog语句中的assign、initial和always的区别于使用
  与C语言不通是,在Verilog module中的所有过程块(如initial块和always块)、连续赋值语句(如assign语句)都是并行的。在同一module中这三者出现的先后顺序与执行顺序没有关系。
  
  这三种语句常被用来赋值。当用于赋值时,有很大的区别。
  
  assign相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。 assign的功能属于组合逻辑的范畴,应用范围可概括为以下三点:
  (1)持续赋值;
  (2)连线;
  (3)对wire型变量赋值,wire是线网,相当于实际的连接线,如果要用assign直接连接,就用wire型变量。wire型变量的值随时变化。
  其实以上三点是相通的。

//eg:
wire[8:0] reg;  //reg占8bit
assign reg = 8'b01010011;   //赋值
assign reg = 8'hC4; //赋值 十六进制,只需要两位就够了

  assign可以独立于过程块而存在于module的功能定义部分,即不能在always过程块中使用assign语句。

  initial和always属于过程赋值语句,常用于给variable型变量赋值。
  其中,initial块从仿真0时刻开始执行,在整个仿真过程中只执行一次;initial块从仿真0时刻开始执行,在整个仿真过程中只执行一次。如果一个模块中包括了若干个initial块,则这些initial块从仿真0时刻开始并发执行,且每个块的执行是各自独立的。如果在块内包含了多条行为语句,那么需要将这些语句组成一组,一般式使用关键字begin和end将他们组合在一个块语句;如果块内只有一条语句,则不必使用begin和end。例如:

`tiemscale 1ns / 1psmodule example(input wire data1,input wire data2,output reg out1,output reg out2);reg test;initial begin   //需要使用begin和end语句out1 = data1;out2 = data2;
endinital#50 test = out1 + out2;//#50,延时50ns再执行(具体下面会解释)initial //不需要使用begin和end语句test = out1 - out2;endmodule

  三个语句块同时在0时刻开始执行,但是由于有延时,所以执行结果如下: 

时间          执行语句
0           out1 = data1;
0           out2 = data2;
0           test = out1 - out2;
50          test = out1 + out2;

  always语句包括的所有行为语句构成了一个always语句块。该always语句块从仿真0时刻开始执行其中的行为语句;最后一条执行完成后,再开始执行其中的第一条语句,如此往复循环,直到整个仿真结束。因此,always语句块常用于对数字电路中一组反复执行的活动进行建模。以一个例子作为说明: 

module(input wire data1,input num;output data);always(posedge clk) beginif(num > 1) data = data1 + 1;else data = data1 - 1;
endendmodule

  对于以上程序,主要用了下面的模型:
  
  always(敏感信息)begin
   //your expression
  end

  clk = 1时,就会触发always语句块的执行(posedge代表上升沿)。直到整个程序退出运行为止。

  always的使用方法类似于initial,只不过多了一个循环执行的属性。

模块的定义和引用及宏定义
例如,我定义一个名叫example的模块,并在test中引用它:

example.v

module example(input wire[5:0] data1,output reg[5:0] data2);integer i;
always(posedge clk) beginfor(i = 0; i < data1; i++)data2 = data1 + 1;
endendmodule

test.v

`include "example.v"    //不在同一个文件夹下,需要注明路径module test;    //无参数传入时,可以这样写
wire[5:0] Mydata1;
wire Mydata2;assign Mydata1 = 1'b1;
//方法一
example exa(Mydata1, Mydata2);
/**
*参数需要严格对应。即Mydata1要想赋值给data1,只能放在第一个位置
**///方法二
example exa(.data1(Mydata1),//data1来自example.v,Mydata1则来自test.v.data2(Mydata2));
/**
*参数不需要严格对应。
*即Mydata1要想赋值给data1,可以放在任意位置。所以,该方法还可以写成:
*example exa(
*   .data2(Mydata2),
*   .data1(Mydata1)
*   );
*另外,参数数量也可以不严格对应。
**/
endmudule

  需要注意的是,“ ` ”符号,需要在英文状态下,按下Tab建上方对应的键,即标有“ ~ ’ ”这两个符号的键;“ ’ ”符号则是英文状态下,按下双引号符号键即可。前者用于头文件引用,后者用于定义常量。

  关于宏定义的使用,也举个例子: 

`define Add     6'b000000module test;wire[6:0] tmp;
assign tmp = `Add;endmodule 

  注意定义和引用方式。

关于时间
  大家在使用Verilog语言时,一定都见过下面的句子:

`timescale 1ns/1ps

   这个句子是什么意思呢?先看几个例子:

`timescale 1ns / 100ps#50 clk = ~clk;    //50ns,时钟信号改变一次。即由1变为0,或者由0变为1
#50.12 clk ~clk;   //50.1ns,时钟信号改变一次
#50.1 clk = ~ckl;  //50.1ns,时钟信号改变一次

  由此可见,它的含义是:时间单位 / 单位精度

  学习就学习到这里了,接下来,我们就可以尝试去实现CPU了。

单周期CPU实验之学习之旅相关推荐

  1. 计算机公共基础知识实验报告,MIPS单周期CPU实验报告总结.doc

    <计算机组成原理实验> 实验报告 (实验二) 学 院 名 称 : 专业(班级) : 学 生 姓 名 : 学号 : 时间:2017年11月25日 成 绩 : 实 验 二 : 单周期 CPU设 ...

  2. 合肥工业大学宣城校区计算机组成原理实验 单周期 CPU 设计与实现

    本实验使用的是Verilog,离谱的是CSDN居然找不到Verilog的代码块,只能使用c语言的代码块了. 一.实验目的: 通过设计并实现支持 10 条指令的CPU,进一步理解和掌握CPU 设计的基本 ...

  3. 计算机组成原理实验单周期处理,计算机组成原理实验实验报告-单周期cpu设计...

    计算机组成原理实验实验报告-单周期cpu设计 (16页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 计算机组成原理实验计算机组成原理实验 ...

  4. 【中山大学计算机组成原理实验】单周期CPU设计与实现

    实验一 : 单周期CPU设计与实现 一. 实验目的 (1) 掌握单周期CPU数据通路图的构成.原理及其设计方法: (2) 掌握单周期CPU的实现方法,代码实现方法: (3) 认识和掌握指令与CPU的关 ...

  5. 【计算机组成原理】实验4:单周期CPU(Verilog)中海大

    [计算机组成原理]实验4 使用Verilog语言实现一个单周期CPU,测试平台:Vivado ①部分代码: single_cycle_cpu.v: `timescale 1ns / 1ps`defin ...

  6. 单周期CPU——verilog语言实现

    单周期CPU的设计与实现 关于单周期CPU的设计问题,相信各位在课程上也有所学习,以下是个人的一些理解 整个项目的资源下载:这里写链接内容 实验内容 基本要求 PC和寄存器组写状态使用时钟触发,这是必 ...

  7. 【Computer Organization笔记10】单周期CPU设计:基于7条MIPS指令的数据通路

    本次笔记内容: P19 计算机组成原理(19) P20 计算机组成原理(20) 本节课对应幻灯片: 组成原理24 singlecycle.pptx 基于上节课的7条MIPS指令的数据通路,分别针对7条 ...

  8. (Verilog)单周期CPU设计

    (Verilog)单周期CPU设计 首先是基础资料部分(借用学校资料): 一.实验内容 设计一个单周期CPU,该CPU至少能实现以下指令功能操作.需设计的指令与格式如下: ==> 算术运算指令 ...

  9. 单周期CPU设计(Verilog)

    2017/06/08: 当时单周期cpu写的比较仓促,没有深入的进行调试,我准备在放假的时候重构一下代码, 然后把博文改进一下,现在实在没有时间,很抱歉~ 不过多周期我有调试过的,所以有需要的可以移步 ...

最新文章

  1. C#复制、粘贴文本信息到剪贴板
  2. educoder python入门之基础语法-用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)...
  3. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-目录
  4. 1.A+B Problem
  5. Python列表元素操作相关的2个函数和匿名函数
  6. 框架下cookie的使用_为什么自动化运维系统越来越多使用都RESTful API?
  7. Java 8 SE可选,严格的方法
  8. UBIFS - UBI File-System
  9. 408中的计算机组成原理,2021考研计算机大纲408计算机组成原理部分原文解析
  10. mvc ajax 页面不刷新页面,如何在不刷新页面MVC C#的情况下显示不同的值
  11. 基于GPU的医学图像三维重建体绘制技术综述
  12. 计算机视觉-混合动态纹理模型(Mixtures of Dynamic Textures)
  13. 软件基本功:没有人比我更重视测试
  14. 双11当天,淘宝搜索如何让CPU使用率降45%,GMV提1% | 论文
  15. Monkey Test 命令使用
  16. 身份证验证Java代码
  17. RubyInstaller 在 Windows 环境下的安装
  18. Android采用消息推送实现类似微信视频接听功能
  19. 【报告分享】2021小红书电商直播趋势报告-千瓜数据(附下载)
  20. js修改伪元素的属性、styleSheets获取样式表,Failed to read the 'cssRules' property from 'CSSStyleSheet' Cannot acces

热门文章

  1. 2022年华为云存储618最新活动攻略
  2. Echarts之Pie (一)
  3. 菜鸟、京东物流再提速,快递业卷出新高度
  4. 华顺信安 白帽汇安全研究院二面复盘
  5. vue3中v-on 、v-model与v-for和v-bind
  6. 如何让业务实现三周内实现点击率翻倍?我们是这么做到的...
  7. 电磁场与电磁波 面电流和体电流磁感应强度的计算
  8. 视频编码之I帧、P帧、B帧
  9. 什么是JSON(详解)
  10. “一见钟情” 文证通证件识别让旅行证件不再寂寞