11.1~11.2数电实验一些点+11.4~11.5报错复盘

2023-11-05 17:28

本文主要是介绍11.1~11.2数电实验一些点+11.4~11.5报错复盘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方框写在前面是说这个数有多大,写在后面是说这类数有多少

前面的用于计数,每位无实际意义;后面每位都代表一个同类型的,即数组,每位有实际意义

使用四位格雷码作为深度为8的FIFO的读写指针

将格雷码转换成四位二进制数,使用二进制数低三位作为访问RAM的地址

声明两个初级信号

如果能写,就接着写,让waddr_bin+1

如果能读,就接着读,让raddr_bin+1

声明格雷码信号与读写指针

获取格雷码,即让原码与原码向左移位一位后的码的异或,按位与

格雷码是循环编码,其循环的长度与本身格雷码的长度有关,自身长度越长,循环周期越长

得到真正的读写指针

开始一拍时,rptr_buff为0,rptr_syn为0;第二拍,rptr_buff为rptr(1),rptr_syn为0;第三拍,前者为rptr(2),后者为rptr(1).

当写指针比读指针多循环RAM一周时,此时读写指针的最高位和此高位都相反,其余位相同,FIFO为满

FIFO的组成部分主要为三块,存储模块,指针计数器,判断逻辑

存储模块主要用于数据的暂时存储,深度可配置

指针计数器主要用于计算当前的存储模块读写指针的位置

判断逻辑主要是为了比较读写指针,判断当前FIFO的状态

存储模块的RAM逻辑就是管存储,用reg模拟即可,主要就是给读写指针,然后依据读写指针对所存储的数据进行更改与获取

让读写地址的位宽增加一位最高位作为奇偶标记,便于空满的判断

满的时候

一开始电路复位后,FIFO为空,持续以每次一个字的速度将数据写入FIFO,写指针将不断增加,当达到地址范围的最大值时,写指针又回到0.将数据写入FIFO时,写使能信号有效。始终周期结束时,写指针调整为下一个值

写指针和读指针以环形方式移动,写指针在前,读指针追随

只有当队列为空或者满时,写入和读出的指针才可能相同

要确保不会发生两种情形,一是给满的队列写入数据,即所有位置都有有效数据,没有多余数据;二是从空的队列中读取数据。

故当FIFO为满时,禁止继续写入数据;为空时,禁止继续读取数据

同步FIFO中,写入和读出操作可以同时进行,也可以发生在不同的时刻

报错复盘

顶层文件无reg

 在顶层模块里,也就是说不涉及里面信号具体变化方式的文件,只是把各部分串联,联系起来的顶层文件里,也即没有always的模块里,就不需要定义reg型,线型就行

我将uart_done(出问题的信号)的变量类型设为reg了,也就是我是reg uart_done这个信号的,这样做是错误的,哪怕你在接收模块确实定义的是reg类型,但是在顶层模块的时候,它可以视为是一条单纯的线而已,所以应该用wire

 ambiguous clock in event control

第二种情况就是赋值冲突,同一个always里允许两个if并行,但是两个if里的内容不能有交集

 操作?

操作复位时,必须要保持读使能开关打开,不然复位后依然显示的上一个数

这篇关于11.1~11.2数电实验一些点+11.4~11.5报错复盘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/351385

相关文章

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

Vue3上传图片报错:Current request is not a multipart request

当你看到错误 "Current request is not a multipart request" 时,这通常意味着你的服务器或后端代码期望接收一个 multipart/form-data 类型的请求,但实际上并没有收到这样的请求。在使用 <el-upload> 组件时,如果你已经设置了 http-request 属性来自定义上传行为,并且遇到了这个错误,可能是因为你在发送请求时没有正确地设置

OpenStack离线Train版安装系列—11.5实例使用-Cinder存储服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

QT 编译报错:C3861: ‘tr‘ identifier not found

问题: QT 编译报错:C3861: ‘tr’ identifier not found 原因 使用tr的地方所在的类没有继承自 QObject 类 或者在不在某一类中, 解决方案 就直接用类名引用 :QObject::tr( )