- 博客(43)
- 收藏
- 关注
原创 计算机原理(3) CPU的诞生 自动操作 IO 存储器
上一篇我们把CPU比作房屋,讲述了房屋的基本构造—计算机的三个根本基础,房屋的用途—程序是指令和数据的集合,房屋在每个视角下的定义—计算机的处理方式有时与人们的思维习惯不同,这一节,引自编码:隐匿在计算机软硬件背后的语言,来描述一下CPU这个房屋是怎么建造的,为什么造出CPU?就是说明CPU的设计理念!
2024-01-31 08:25:21
701
原创 计算机原理(1)计算机寄存器 汇编语言 内存访问
这一篇文章主要是想和大家探讨以下几个问题:1、汇编语言与机器码的前世今生?2、8086计算机中的通用寄存器,段寄存器,代码段,数据段,内存的物理地址这些奇奇怪怪的概念是什么?怎么得来的?3、CPU如何区分指令与数据,指令与数据的概念是怎样产生的?4、计算机中的特定概念,有的是从内存角度出发的,有的是从处理器角度出发的,出发角度不同,硬件结构就不同,相应的在硬件结构之上的软件应用就不同,概念如何影响硬件,硬件又是如何影响软件的呢?
2023-12-25 08:47:23
930
原创 SoC芯片中的复位
复位的目的就是为了进入一个状态,然后有序的运行代码,实现我们想要的功能,复位的概念在Verilog也有体现,Verilog中的IDLE类似于复位状态,Verilog状态机功能的实现就是从IDLE状态开始,根据输入跳转到不同的状态来实现不同的功能,IDLE状态的进入相当于电脑的重启,STM32中与之相似的有复位函数,复位函数的本质就是PC指针指到复位的地址单元,从复位地址那里开始执行,重新来一遍。3、复位是有顺序的,所以要注意复位的顺序!2、热复位:主要是无需掉电的复位,例如:看门狗复位,软复位,按键复位。
2023-12-19 23:19:50
1360
原创 Systemverilog 压缩数组 packed
文章目录压缩数组一、压缩数组的定义二、压缩数组的类型1.引入库2.读入数据总结压缩数组 这个文章的主要内容是以下三点: 1、压缩数组的定义 2、压缩数组的类型 3、压缩数组类型的测试实例一、压缩数组的定义二、压缩数组的类型1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarni..
2022-01-17 17:48:17
5552
1
原创 Systemverilog 接口 interface modport
文章目录目录一、接口的定义二、接口的内容接口的modport三、interface 一主一从结构间的读写操作目录 这篇文章主要是介绍接口interface的作用,为什么要有接口,接口的优点、缺点,以及利用接口去实现一主一从结构之间的读写操作。一、接口的定义 SystemVerilog在Verilog语言基础上扩展了“接口”(interface)结构,SystemVerilog增加了新的端口类型—接口,接口允许许多信号合成一组由一个端口表示,只需在一个地方对组成接口的信号进行声明,使用这些..
2022-01-16 17:59:20
2540
原创 do while循环语句
while使用while(循环条件) { 循环操作; } do while使用do { 循环操作 }while(循环条件); 区别 举一个例子,while语句与do while语句的区别do { 我上传选择题}while(系统判断正确); 从文字上讲具体区别就是: 1、while先判断后执行,do while先执行后判断 2、不满足循环条件时,while循环一次都不会执行,do while 会执行一次。...
2021-12-06 09:32:55
546
原创 Systemverilog always_comb 过程块
文章目录前言一、Verilog always与Systemverilog always_comb、always_latch、always_ff对比二、零时刻自动求值1、 always_comb 与 always不同2.always_comb 和 always@*的比较总结前言 这一篇文章主要比较Verilog always块与Systemverilog 中的always_comb、always_ff、always_latch块的区别。一、Verilog always与Systemveri..
2021-12-05 20:17:32
4352
1
原创 modelsim 无objects窗口 的解决方法
当modelsim无波形窗口(wave)和目标窗口(objects),这时怎么办呢???? 具体操作如下: 解决方法有三种: (1)打开modelsim的view窗口,在objects前面勾选对号,就可以打开objects窗口了。 (2)仿真的时候,不勾选enable optimization选项。 (3)找到modelsim 安装目录下的ini文件注释掉VoptFlow,或者把VoptFlow的值从1变成0。...
2021-12-05 16:54:17
7611
原创 Systemverilog 枚举类型 enum
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、枚举类型1.枚举类型值2.枚举类型的基类二、枚举类型使用举例1.引入库2.读入数据总结内容:这篇文章的主要是为了描述枚举类型的定义,为什么需要枚举类型,以一个例子说明枚举类型的基类型,以另外一个例子说明枚举类型的重要性提示:以下是本篇文章正文内容,下面案例可供参考一、枚举类型1.枚举类型值 缺省情况下,枚举类型列表中的标签代表的实际数值是一个int类型的整数,枚举列表中的第一个标签代表数值0,第二个名称表示1,
2021-12-05 16:38:43
6614
2
原创 Windows IP地址的获取方法
首先是使用Windows+R快捷键打开命令行窗口,输入cmd命令,然后为了获取IP地址,输入ipconfig,就可以获取IP地址。
2021-11-30 14:11:00
2578
原创 Systemverilog 结构体 struct 与 压缩结构体
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录结构体与压缩结构体定义一、为什么要用结构体二、为什么要使用压缩结构体三 、结构体与压缩结构体赋值结构体与压缩结构体定义前言:我一直认为学习一个东西的最好方法是知道为什么、是什么、怎么做,所以文章的内容也会沿用这种方式阐述。一、为什么要用结构体 结构体(structure)是一种可以包含不同数据类型元素的集合类型。这一点跟数组、队列等集合类型是不一样的,数组和队列只能包含相同数据类型的元素。结构体在引用的时候,可以对这
2021-11-30 12:09:10
2279
原创 Systemverilog 静态变量 (static) 与 动态变量(automatic) 区别
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录静态变量 Static 动态变量 Automatic一、静态变量和动态变量的定义二、使用步骤1.引入库2.读入数据总结静态变量 Static 动态变量 Automatic此章节主要包括静态变量与动态变量的区别,两者在verilog与systemverilog的不同,同时举3个实际例子,说明Systemverilog的内嵌初始化一、静态变量和动态变量的定义 自动变量:也可以动态变量,变量的存储区在需要时
2021-11-25 23:42:15
6393
5
原创 csdn markdown编辑器 换行 首行缩进字符
csdn在编辑过程中经过会遇见的两个问题,一个是无法换行,另外一个是无法首行缩进,用传统的空格键无法实现功能,解决方法如下: 首行缩进使用&emsp后面一定要加一个英文的分号;
2021-11-25 23:00:27
178
原创 EEPROM读写测试_IIC协议讲解!
EEPROM读写测试_IIC协议讲解提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录二、IIC通讯协议# 一、EEPROM简介EEPROM即电可擦除可编程只读存储器,是一种常用的非易失性存储器(掉电后,数据不丢失),100万次为常见主流产品。为了确定是哪个器件与FPGA正在通信,需要IIC协议发送器件地址。二、IIC通讯协议 IIC即集成电路总线,是一种两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。多用于**主机和从机**在数
2021-03-16 12:37:10
521
1
原创 FPGA-跨时钟域问题的解决
FPGA 跨时钟域解决问题提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言解决跨时钟域问题的原理两级采样法握手法2.读入数据总结前言如果控制两个时钟域的信号没有关联,例如它们分别是由两个不同频率的晶振产生的,那么它们的相位可能经过上亿个周期才能对齐,甚至可能永远可对不起1,这种情况下,肯定会出现采样到不稳定态的问题。提解决跨时钟域问题的原理既然跨时钟域的问题称为隐患已经成为必然,所以我们需要用恰当的方法来确定当我们跨时钟域取信号的时候,当前时钟的有效沿不会采
2021-02-22 20:45:46
928
原创 FPGA-时钟域
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、时钟信号基本特征1.时钟信号基本特征参数介绍二、时钟信号的分类按来源分类三、时钟域1.时钟域的概念2.时钟树简介前言在时序逻辑中,正是时钟信号将各个存储单元中的数据一级、一级地推动下去,如果时钟信号突然停止,那么整个时序逻辑也将陷入瘫痪,因此时钟就好像时序逻辑的心跳一样,那么重要,却又那么平常的存在着。一、时钟信号基本特征1.时钟信号基本特征参数介绍时钟信号具有什么样的基本特征呢?对于一个时钟信号来说,最
2021-02-09 18:45:57
2193
1
原创 FPGA-竞争与冒险
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言单输入的组合逻辑多输入的组合逻辑(1)多个输入不同时变化(2)多个输入同时变化(3)仅有一个输入变化竞争与险象的讨论前提什么是竞争(1)门电路的开关特性(2)门电路的半开关特性(3)竞争的定义(4)险象的定义二、使用步骤1.引入库2.读入数据总结前言存在多个输出的组合逻辑也必然存在着和寄存器输出类似不稳定态问题,不过不幸的是,对于多输出的组合逻辑。若想避免其输出出现不稳定态,可不是利用格雷码这样的方法可以轻松解决的,这是
2021-02-08 20:50:57
528
原创 FPGA-数字电路的隐患
## Verilog 之数字电路的隐患文章目录前言数字电路中的隐患寄存器输出的不稳定态多触发器寄存器不稳定态对数字电路的影响特定状态下去除不稳定态的方法消除不稳定态的定理格雷码简介总结前言数字电路由于其自身的特点,总会出现一些隐患,有些隐患不会对FPGA设计造成影响,有些时候这个隐患是致命的,本章对隐患进行简单的介绍。寄存器输出的不稳定态不稳定态,指的就是不稳定的状态,请注意,寄存器输出的不稳定态并不是由于赋值冲突而导致的不确定态(即“X”状态),而是由于不同路径的延迟不一致所导
2021-02-06 14:59:50
365
原创 FPGA 频率计实验
FPGA 频率计实验实验要求:实现等精度频率计,通过数码管显示。频率计实验又称为频率计数器,是一种专门对被测信号进行测量的电子仪器。计数法:直接计数单位时间内的被测信号的脉冲数,这种方式测量精度高、速度快、适合不同频率、不同精确度测频的需要。测待测频率,需要有一个基准时钟,基准时钟频率设置为CLK_FS,基准时钟的脉冲数为fs_cnt,生成门控信号为高,在门控信号为高的时候,查待测信号的脉冲数,设待测信号的频率为clk_fx,待测信号的脉冲数为fx_cnt;则满足下列比例:fs_cnt/CLK_
2021-02-04 23:16:39
683
原创 FPGA-VGA彩条显示
FPGA VGA彩条显示实验此实验的功能是在显示屏上显示红黄蓝三个颜色的色条VGA 视频图形阵列,一种使用模拟信号进行视频传输的标准。VGA分为行同步与场同步行同步与场同步都分为同步脉冲、显示后沿、有效数据段、显示前沿。本实验选用的VGA为640*480,行有效数据的像素点个数为640个,场有效数据的像素点个数为480个,利用25mhz的时钟进行驱动。module vga(clk,rst_n,hsync,vsync,rgb);input clk;input rst_n;output
2021-02-04 16:06:04
796
原创 FPGA-赋值冲突
Verilog 语法(2)参数声明一致推荐在module 端口声明之前声明参数,在module例化语句的最开始的时候修改参数。module xxx#(parameter WIDTH=8)(input a,output b);xxx #(.WIDTH(4))三种描述方式1、结构化描述方式module example(input a,b,c,d;output o);wire tmp0,tmp1;XOR1 mo(.O(tmp0),.IO(a),.I1(b));XOR2 m1(.O(
2021-02-01 19:22:25
602
原创 FPGA-模块声明 数据类型
Verilog 基本语法一、 Verilog 只有一个部分,即module,称之为模块,模块的接口部分主要分为三个部分,即模块命名部分、参数声明部分和端口列表部分。(1)模块声明部分很简单,语法关键字是module,在空格后面跟随一个名字即可。(2) 参数声明部分关键字是parameter,parameter的作用主要有两个,一个是增加代码的可重用性,另一个是定义代码中的常量,增加代码可读性和方便代码修改。(3)端口列表部分,Verilog中的端口有三种分别是输入端口、输出端口、以及双向端口,i
2021-02-01 14:43:25
1228
原创 FPGA-串口通信协议
FPGA 串口通信协议波特率:波特率就是串口的通信速率,常见的波特率有12000bps、4800bps、9600bps、115200bps、256000bps、500000bps,这里波特率的意思是每秒可以传输bit的个数,这里的5207=500000000/9600;传递一个字节需要的时间串口接收模块输入为时钟、复位信号、输入数据、输出数据、数据接收完成标志源代码:module chuanxing_3(clk,rst_n,data_in,po_data,po_en);input clk,rst
2021-01-31 19:54:36
830
原创 FPGA FIFO读写实验
FPGA fifo读写实验FIFO: first-in-first-outFIFO一般用于不同时钟域之间的数据传输,也常用来实现不同位宽的接口数据的匹配。FIFO是先进先出的存储器,实现数据的同步与缓存,当数据传输速率不一致的时候,利用FIFO进行数据的缓存。系统框图点击Yes表示读写使用同一个clk,NO代表读写不是使用一个clk,使用不同clk;module ip_fifo(clk,rst_n);input clk,rst_n;//wire definewire wrreq;
2021-01-29 21:54:50
904
原创 FPGA,智能抢答器,经过上板验证成功
智能抢答器项目设计功能如下:1.主持人按下清零键,可清除所有信息2.两位选手进行抢答,当一位选手按下抢答键,其他选手再按无效,数码管显示选手序号。3.当剩余时间15s时,开始倒计时,剩余时间为0的时候,表示回答时间到4.当时间到时,蜂鸣器响5s表示时间到,进行下一轮抢答。此项目分为四个模块,分别是按键消抖模块、数据处理模块、倒计时模块、数码管显示模块数据处理模块是用来产生start信号,通知倒计时模块,开始倒计时,同时数据处理模块要输出当前抢答者的序号,倒计时模块的输入信号为start信号,
2021-01-29 19:13:27
1427
5
原创 FPGA-RAM读写测试
FPGA RAM(2)RAM的读写测试,利用signaltap ii进行板级测试错误经验积累:signaltap ii软件在信号测试的时候,有的信号是红色的,无法进行调试,这是因为这个信号在编译的时候被综合掉了,正确的做法是把这个信号,作为输出信号。module ram(input clk,input rst_n,output [7:0] ram_rd_data);//wire definewire ram_wr_en; //ram 写使能wire ram_rd_en; //ram读使能
2021-01-27 21:07:15
626
原创 lemming games 3 ! hdlbits
hdlbitslemmings 3旅鼠游戏3在2的基础上添加了挖地功能,这道题的解题关键是搞明白掉落的优先级高于挖地的优先级高于转向的优先级。module top_module(input clk,input areset, // Freshly brainwashed Lemmings walk left.input bump_left,input bump_right,input ground,input dig,output walk_left,output walk_r
2021-01-25 22:35:19
108
原创 lemming games 1!! hdlbits
hdlbitsLemmings1旅鼠游戏有四个系列系列1:module top_module(input clk,input areset, // Freshly brainwashed Lemmings walk left.input bump_left,input bump_right,output walk_left,output walk_right); //parameter LEFT=0, RIGHT=1;reg state, next_state;always
2021-01-25 22:23:56
95
原创 Hdlbits-水库问题
hdlbits 水库问题 Exams/ece241 2013 q4这个问题给我最大的教训就是一定要好好学习英语,题目都看不懂,解释一下这道题目,水位是循序渐进变化的,当水位低于S1的时候,打开所有水阀,当前水位比过去低的话,打开DFR,由于是穆尔型状态机,因此设定状态数目,根据题意可分为六个状态,分别是低于S1,高于S1低于S2同时当前水位比过去高,高于S1低于S2同时当前水位比过去低,高于S2低于S3同时水位比过去低,高于S2低于S3同时水位比过去高,高于S3的水位。module top_modul
2021-01-25 22:04:55
352
原创 数码管动态显示,包括源代码,测试代码
数码管的动态显示数码管的动态显示是利用人眼的视觉暂停效应,1ms扫描一次数码管,给不同的数码管不同的数值,最好的扫描频率是1000hz,所以需要一个分频时钟,此实验的任务是实现0-100的累加,1s加一次,废话不多说,以下是源代码:顶层模块例化了三个子模块,包括分频模块,计数模块,数码管动态显示模块module dongtaisaomiao(clk,rst_n,seg_sel,seg_led);input clk,rst_n;output [2:0] seg_sel;output [7:0]
2021-01-25 20:05:15
2226
原创 FPGA-小梅哥时序传输模型
FPGA时序传输模型Skew时钟偏斜:时钟从源端口出发,到达目的寄存器和源寄存器的时间差值。将上述公式进行变换:Tclk+(Tclk2-Tclk1)-Tsu-Tco-Tdata>=0;Slack=Tclk+Tskew-Tsu-Tco-TdataSlack>=0; 目的寄存器能够正确的接收源寄存器发射过来的数据建立时间余量Tclk1:时钟信号从时钟源端口出发,到达源寄存器时钟端口的时间。Tco:时钟上升沿到达寄存器时钟端 到 数据输出到寄存器Q端口的时间。Tdata:数据从源
2021-01-25 17:04:10
586
原创 FPGA-小梅哥时序约束
FPGA时序分析和时序约束时序分析:时序的目的是通过分析FPGA设计中各个寄存器之间的数据和时钟传输路径,来分析数据延迟和时钟延迟之间的关系,一个设计OK的系统,必然能够保证整个系统中所有的寄存器能够正确的寄存数据。数据和时钟传输路径是由EDA软件(quartus),通过针对特定器件布局布线得到的。时序约束:两个作用1、告知EDA软件,该设计需要达到怎样的时序指标,然后EDA软件会根据时序约束的各个参数,尽力优化布局布线,以达到该约束的指标。2、协助EDA软件进行分析设计的时序路径,以产生相应的时
2021-01-25 14:42:53
979
原创 FPGA-小梅哥时序分析
小梅哥 FPGA时序分析和约束实例演练(1)FPGA现场可编程门阵列FPGA组成三要素:可编程逻辑功能块片内互联线输入输出块可编程逻辑功能块:实现用户功能的基本单元,多个逻辑功能块通常规则地排列成一个阵列结构,分布于整个芯片。一个可编程逻辑功能块基本组成包括:查找表D触发器进位链可编程输入输出块可编程输入输出块完成芯片内部逻辑与外部管脚之间的接口,围绕在逻辑单元的阵列四周,可编程输入输出块的功能和性能从一定程度上也决定了该器件的市场定位。一个可编程输入输出基本单元包括:输出寄存
2021-01-25 13:42:44
1031
原创 数码管静态显示程序,上板验证成功
数码管静态显示按照连接方式不同可分为共阴极与共阳极数码管数码管共十个引脚,除了a,b,c,d,e,f,g,dp,两个公共端,共阴极数码管公共端连接到gnd,共阳极数码管阳极公共端连接到+5V,共阴极需要在端口给低电平,共阳极需要在端口给高电平。数码管分为位选与段选信号,位选给高电平。六个数码管显示0-f,同时数码管每隔0.5s变化一次。由于每隔0.5s变化一次,所以需要一个计时器。如下图是源代码分为顶层模块,计数模块,数码管显示模块。module seg_led_static_top(clk
2021-01-23 13:20:43
791
原创 按键控制蜂鸣器,验证成功
按键控制蜂鸣器按下按键的时候蜂鸣器响,再次按下的时候蜂鸣器不响,循环往复。module xiaodou_beep(clk,rst_n,key,beep);input clk,rst_n;input key;reg key_value;output reg beep;reg key_reg;reg [19:0] cnt;always @(posedge clk or negedge rst_n)beginif(!rst_n)key_reg<=0;elsekey_reg<
2021-01-23 11:52:15
1550
原创 最完整的按键消抖程序,包括测试代码
按键消抖由于按键在按下的时候会出现轻微的抖动,一般情况下认为当按下或者抬起状态超过10ms的时候,算是稳定。如下是源代码,当key与key_reg状态不同的时候,是发生抖动的时候,或者是按下或者抬起的时候,如果计数超过10ms,则把此时key的状态赋值给key_value,key_flag表示此时的信号是消抖后的信号。module xiaodou(clk,rst_n,key,key_value,key_flag);input clk,rst_n;input key;output reg key_
2021-01-22 21:15:25
1181
原创 Hdlbits-MUx
多路选择器 hdlbitsmodule top_module(input a, b, sel,output out );assign out=sel?b:a;endmodulemodule top_module(input [255:0] in,input [7:0] sel,output out );/* always @(*)beginfor(int i=0;i<=255;i=i+1)out=in[i];end*/assign out=in[sel];endm
2021-01-20 20:02:11
109
原创 Hdlbits-移位寄存器
shift registers这是hdlbits中的移位寄存器专题这是一个常见的移位寄存器题目,带有置位以及数据加载功能,附上源代码module top_module(input clk,input areset, // async active-high reset to zeroinput load,input ena,input [3:0] data,output reg [3:0] q);always @(posedge clk or posedge areset)begi
2021-01-20 19:45:37
399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人