【Verilog】数据流建模传输问题:赋值传输有方向

这次,我们说明的是,assign语句实现的数据流建模,包含的是两个层面

  1. 建立联系
  2. 传输方向

assign A = B的本质含义是

  1. A与B建立关联
  2. B的值传给A

这个传输方向至关重要,实际情况是什么,就必须按照顺序进行,不是单纯地连线,本质是数据的传输,是有方向的

看看下面的CPU的例子,注意注释中的【关注点】

// reg_files_1 Inputs
wire  [31:0]  ALUresult;	// 【关注点1】wire   [4:0]  rA = instruction[25:21];
wire   [4:0]  rB = instruction[20:16];
wire   [4:0]  rW = instruction[15:11];
wire   [31:0]  writeData = ALUresult;	// 【关注点2】
wire   RegWrite;// reg_files_1 Outputs
wire  [31:0]  A;
wire  [31:0]  B;reg_files_1  u_reg_files_1 (.clk                     ( clk         ),.rst_n                   ( rst_n       ),.rA                      ( rA          ),.rB                      ( rB          ),.rW                      ( rW          ),.writeData               ( writeData   ),.RegWrite                ( RegWrite    ),.A                       ( A           ),.B                       ( B           ));/******** ALU ********/// ALU_1 Inputs
wire   [3:0]  ALUop;// ALU_1 Outputs
// wire  [31:0]  ALUresult = writeData; // 【关注点3】ALU_1  u_ALU_1 (.A                       ( A           ),.B                       ( B           ),.ALUop                   ( ALUop       ),.ALUresult               ( ALUresult   ));

上面的例子是正确的,RTL优化的结果是
在这里插入图片描述我们看看错误的示例

// reg_files_1 Inputs
// wire  [31:0]  ALUresult;	// 【关注点1】wire   [4:0]  rA = instruction[25:21];
wire   [4:0]  rB = instruction[20:16];
wire   [4:0]  rW = instruction[15:11];
wire   [31:0]  writeData; // = ALUresult;	// 【关注点2】
wire   RegWrite;// reg_files_1 Outputs
wire  [31:0]  A;
wire  [31:0]  B;reg_files_1  u_reg_files_1 (.clk                     ( clk         ),.rst_n                   ( rst_n       ),.rA                      ( rA          ),.rB                      ( rB          ),.rW                      ( rW          ),.writeData               ( writeData   ),.RegWrite                ( RegWrite    ),.A                       ( A           ),.B                       ( B           ));/******** ALU ********/// ALU_1 Inputs
wire   [3:0]  ALUop;// ALU_1 Outputs
wire  [31:0]  ALUresult = writeData; // 【关注点3】ALU_1  u_ALU_1 (.A                       ( A           ),.B                       ( B           ),.ALUop                   ( ALUop       ),.ALUresult               ( ALUresult   ));

只是修改了关注点的部分,然而是错误的,但是,RTL优化结果看起来一样,行为仿真的时候writeData确实Z 高阻抗状态。

高阻抗是为什么?

通常就是不同的信号撞一起了

在这里插入图片描述
对于同一个线路,同时输入01就产生了高阻抗

我们看看之前的示例是为什么。

我们关注下面的部分

在这里插入图片描述在正确的示例中,使用的是

wire  [31:0]  ALUresult;
wire   [31:0]  writeData = ALUresult;

也就是这样的,这是符合CPU的运算逻辑的,将ALU结果输出到寄存器写入。
在这里插入图片描述错误的示例是

wire   [31:0]  writeData;
wire  [31:0]  ALUresult = writeData;

在这里插入图片描述这个时候,我们设置的是红色箭头的方向,而实际上,CPU运算会输出橘色箭头的数据,两个不同的输出撞一起导致了Z高阻抗状态!

小结

赋值语句是有方向的!代表了逻辑设计方向,代表了数据传输方向,不能错!

在这里插入图片描述一般都是右值赋给左值,同时,说明了传输方向是B到A

补充

如果两个信号的声明和赋值顺序是反着的,可以声明的时候不赋值,之后使用assign语句就好了。

wire A;
wire B;
assign A = B;

等价于

wire B;
wire A = B;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(2)

待办事项 时钟频率高,取指周期长,远大于执行周期,如何处理? 不可综合逻辑的处理 接上一篇 【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(1) 8.2 ALU运…

【计算机系统设计】实践笔记(2)插叙:综合与实现

接上一篇文章的第10节 之前完成了功能仿真,下面我们进行综合实现。 10.1.1 综合 综合成功。 实现试试 这真是令人悲伤……找Bug吧。 我们看看综合后的门级网表。 发现综合后的并不是我们想要的……看了看可能是综合的目录错误,我们再试试。 不是这…

【电路原理】学习笔记(1):电路模型的基本变量

上一讲说到了电路模型,这一电路的抽象,现在我们看看它的基本组成。 1 电流 1.1 概念 对于一根管道,它能够流通电荷,定向移动就形成了电流。 单位时间t内,,某一横截面,穿过电荷量是q&#xf…

【电路原理】学习笔记(0):电路与电路模型

东北大学电路原理MOOC 电路原理的核心点:研究电路模型 我们实际看见的,是真实电路 我们高中学的,是电原理图 现在,我们要研究的是电路模型,它是实际电路的抽象模型,并且是理想化的。 对于电路模型&#…

【计算机系统设计】实践笔记(3)改进数据通路:移位R型指令分析

0 回顾 前面的内容中,第一类R型指令分析,我们完成了一类R型指令的设计,完成了其数据通路,构建了相应的部件,并且完成了从ROM中取指,成功进行了基本的功能仿真,进行了综合和实现,但是…

【计算机系统设计】实践笔记(3)改进数据通路:jr指令分析与实现

1 jr指令分析 instructionoprsrtrdshamtfuncjr000000rs000000000000000001000 举例&#xff1a;jr $31 功能&#xff1a;PC <- &#xff08;$31&#xff09; 这是个跳转指令&#xff0c;将指定寄存器的值&#xff0c;放入PC中&#xff0c;是无条件跳转。 我们需要 更新P…

【计算机系统设计】实践笔记(4)改进数据通路:第一类I型指令分析与实现

0 回顾 之前&#xff0c;我们完成了17条R型指令的设计&#xff0c;接下来&#xff0c;我们逐步完成I型指令的设计。 1 核心思想&#xff1a;增量思维 & 复用思维 & 学会选择 & 分治思想 增量思维 我们从无到有&#xff0c;构建了支持R型指令的CPU&#xff0c;接…

【算法】学习笔记(2):递归思想

0 回顾 之前的笔记&#xff08;0&#xff09;和笔记&#xff08;1&#xff09;&#xff0c;我们介绍了算法的基本含义&#xff0c;并且举了一些实例&#xff0c;同时理解了&#xff0c;算法就是人类在教计算机做事情&#xff01; 我们知道&#xff0c;算法就是解决问题的方案…

【计算机系统设计】实践笔记(5)改进数据通路:beq和bne指令分析与实现

接下来的分析和实践非常粗糙&#xff0c;因为跟之前一样的分析流程&#xff0c;不再多说了&#xff0c;如果前面真的掌握&#xff0c;这里不看也罢。 分析 先看beq指令。 ALU输入的是rs和rt&#xff0c;不输入imm&#xff0c;进行subu操作&#xff0c;判断是否为zero&#x…

【算法】学习笔记(4):分治思想 归并排序

分治思想&#xff0c;分治策略&#xff0c;自古有之&#xff0c;与人类生活息息相关&#xff0c;其本质是将大问题拆解为小问题&#xff0c;小问题转换为已知解的问题&#xff0c;进而求解。 军队管理&#xff0c;国家分级治理…… 大规模数据排序&#xff0c;例如10000000000…

html css 学习笔记(1)背景相关

背景颜色 图片 插入图片img背景图片 背景图片 3. logo 4. 大图 5. 装饰性小图 便于控制位置&#xff01; 插入后会执行自动平铺&#xff0c;这与插入图片是不同的&#xff01; div{width: 600px;height: 300px;background-image: url(img/登录用户头像.png); }小结 盒子的第…

2020-12-15 CPU设计复盘

SOC修改 将之前完成的31条指令单周期CPU进行了重构&#xff0c;将其分开&#xff0c;实现了内外有别&#xff0c;将CPU、指令ROM和数据RAM。 这样&#xff0c;以后为其增加接口外设&#xff0c;总线控制&#xff0c;才更加清晰&#xff0c;这是进一步封装和抽象。 MARS大坑 …

Tomcat 学习笔记(0)

JavaWeb 用Java写的程序&#xff0c;可以在浏览器运行。 Request & Responce Web资源 Web服务器 我们在自己的主机启动Tomcat服务器&#xff0c;然后运行它&#xff0c;就能够通过主机访问这个服务器&#xff0c;这个服务器能够运行我们的程序。 部署Web工程 法1 将web…

计算机系统 学习笔记(0)南京大学(一)第一周

课程&#xff1a;计算机系统基础 核心理念&#xff1a;人类世界与计算机世界的异同 人类世界 直观感受数学 计算机世界 与数学不同&#xff0c;存储首先&#xff0c;各层次与现实世界不同 我们关注点是差异点&#xff01; 一样的你就不用关心了&#xff0c;关心差异&#…

x86架构下 CF与OF标志位 带符号和无符号运算 详解

针对能够影响OF和CF标志位的指令&#xff0c;一般来说是涉及到数据运算的指令&#xff0c;这里使用add举例&#xff0c;即不区分有无符号的加法指令&#xff0c;参与运算的数据&#xff0c;从二进制层级去考虑。 CF标志位 对于CF&#xff0c;它是carry flag&#xff0c;进位标…

tmux学习笔记

参考学习链接 我们需要理解几个重要的概念 session 回话window 窗口pane 窗格 window 我们打开的一个terminal就是一个window. 而打开的这个window&#xff0c;也就是打开了一个session&#xff0c;打开window&#xff0c;session开始&#xff1b;关闭window&#xff0c;se…

Linux的ext4文件系统学习笔记

补充&#xff1a;设备独立性 Linux中&#xff0c;设备驱动以文件形式表示&#xff0c;用户操作逻辑设备就是操作文件&#xff0c;而不是具体的物理设备&#xff0c;也就是说&#xff0c;用户操作的是功能&#xff0c;是黑箱&#xff0c;而不是真正的实体。 APP操作的都是逻辑…

html基础元素案例笔记(1)

这是代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>CSS FlexBox test</title><link rel"stylesheet" type"text/css" href"./css/index.css"></head><body>…

C语言中的struct和union区别

参考&#xff1a;Difference between Structure and Union in C 二者区别 struct 这里不做详细说明&#xff0c;因为参考链接中都写明了。只做一些重点强调。 struct中声明的变量&#xff0c;在分配空间的时候&#xff0c;struct结构空间大小&#xff0c;大于等于其内部所有…

Leetcode1512. 好数对的数目 抽出本质原型 利用范围条件

解法1&#xff1a;暴力枚举 class Solution {public int numIdenticalPairs(int[] nums) {int count 0;for(int i 0;i < nums.length; i){for(int j i 1; j < nums.length; j){if(nums[i] nums[j])count;}}return count;} }没啥可说的&#xff0c;就是小学数学问题…