自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 收藏
  • 关注

原创 3.3 运算符及表达式

1、常见运算符算数运算符:(+,-,x,/,%)赋值运算符:(=,<=)关系运算符:(>,<,==,<=,>=)逻辑运算符:(&&,||,!)条件运算符:(?:)位运算符:(~,&,|,^,~^)移位运算符:(<<,>>)拼接运算符:({})2、注意:不同长度的两个数进行位运算时,系统会自动将两者按照右端对齐,并对位数少的操作数进行高位补零;...

2021-07-11 16:47:37 359

原创 3.2数据类型与常量和变量

目录1、常量1.1 数字1.2 参数2、变量2.1 wire形2.2 reg形2.3 memory形1、常量1.1 数字常见进制: 二进制:b/B 十进制:d/D 八进制:o/O十六进制:h/H整数表示 位宽+进制+数字:4`b1010 进制+数字(系统默认位宽):ha//10的16进制 数字(系统默认位宽,10进制):10x与z...

2021-07-11 16:33:00 540

原创 3.1 Verilog模块结构

目录1、verilog模块组成2、要点总结1、verilog模块组成Verilog描述电路时的基本单元是模块,一个模块主要由两部分组成,包括:端口+逻辑功能端口:端口部分对该模块的输入输出接口进行描述,侧重于模块外部接口;逻辑功能:逻辑功能部分对模块的具体功能进行描述,反映了模块输入如何影响输出;2、如何产生功能逻辑:功能逻辑的产生通过三种描述来产生:assign连续赋值+模块调用+always过程块assign连续赋值:assign连续赋值可以独立存在,描述

2021-07-10 20:44:01 2252

原创 如何将MathType嵌入Office 2016

如何将MathType嵌入Office 2016解决方法如下:1、从MathType安装路径中找到MathType\Office Support\32中的MathType Commands 6 For Word 2013和WordCmds两个文件。(此步骤要注意自己安装的Office2016版本是32位还是64位,32位用户在MathType\Office Support\32中可找到两个文件;)2、将上述两个文件拷贝到 \root\Office16\STARTUP 文件夹。此处路径取决于用户安

2021-01-24 11:45:09 2061

原创 数字ic笔试面试-题目汇总

1、FPGA资源(问你用的哪些FPGA,你用的那款fpga的dsp片数,占了多少资源,响应时间多少)2、项目相关(让你画项目的结构框图,系统框架)3、滤波器设计4、FPGA里面的slice,为什么要用RAM,资源优化,时序约束,建立时间,CHIPSCOPE调试时,采样率的设定。5、AXI协议,问uart iic spi各自的优缺点6、代码风格和综合结果有什么关系7、FPGA设计的要点、FPGA的基本流程8、怎么20khz变19khz9、同步与异步逻辑的区别10、数字下变频

2020-11-10 10:19:45 936

原创 FPGA面试笔试专题——FPGA内部组成

FPGA主要由6部分组成:1、可编程IO单元可编程输入输出单元,是芯片与外界电路的接口,完成不同电气特性下对输入/输出信号的驱动与匹配。可以适应不同的电气标准和IO物理特性; 可以调整匹配阻抗特性、上下拉电阻和输出驱动电流的大下; 可以支持多种电平标准,LVDS,DDR等;2、基本可编程逻辑单元基本可编程逻辑单元由LUT和寄存器组成;不仅可以用于实现组合逻辑、时序逻辑,还可以配置为分布式RAM和分布式ROM。3、嵌入式RAM资源即Block RAM,可配置为单双口RAM,F

2020-10-12 11:26:40 535

原创 FPGA笔试面试专题——时钟偏斜(skew)与抖动(Jitter)

时钟偏斜(clock skew)时钟偏斜(偏移)是因为布线长度和负载不同,导致同一时钟上升沿到不同触发器的时间不同。这一时间差,即为时钟偏移。时钟偏斜可能导致时序违例(本文直接粘贴了参考博客中的示意图) 可以看出,同一时钟上升沿,到达D1和D2的时间不同。如果时钟倾斜变大,可能导致保持时间不满足,导致保持时间违例;(数据传输时间不变,本来满足STA分析,不会出现问题。但是时钟倾斜变大,当前时钟上升沿来临变晚,导致保持时...

2020-10-12 11:26:30 4184

原创 异步FIFO代码分析

module Asyn_FIFO(data_out, full, empty, data_in, wen, wclk, wrst,ren, rclk, rrst);parameter datasize = 8; parameter addrsize = 4;input [datasize-1:0]data_in;input wen,ren,wclk,rclk,wrst,rrst;output [datasize-1:0]data_out;output empty,full;reg emp.

2020-10-12 11:26:12 307

原创 地址扩展电路设计

题目: 分析:将两片512K的内存拼接为1片1M的内存,本质是地址扩展;低位地址线A0-A18直接连接;高位扩展电路如下:当输入CE=“H”时, 不管 A19=0或1, CE1 和 CE2都为“H”, 即两片512K都不选(与要求CE高不选中一致)当输入CE=“L”时, A19=0时, CE1=0, 选中上半片512K;CE2=1, 下半片不选中A19=1时, CE1=1, 上半片512K不选;CE2=0, 选中下半片512K...

2020-10-12 11:26:03 342

原创 如何验证时序问题是Tsetup违例还是Thold违例

方案:可以先改变clk周期(延长clk周期),如果问题解决是Tsetup问题,如果不解决,延长组合逻辑延时,如果解决是Thold问题。分析:1、建立时间与时钟周期和组合逻辑延迟均相关 数据传输延时 <= 时间传输延时 + 时钟周期 - 建立时间 Tclk1 + Tco + Tcomb_logic + Tnet <= Tclk2 + Tperiod - Tsu 即: Tskew+ Tperiod - Tsu - Tco - Tcomb_lo...

2020-10-12 11:25:41 1060

原创 FPGA面试专题——寄存器和锁存器的区别

1、简述:寄存器时钟边沿敏感,在时钟有效沿来临时输出才会随输入改变;锁存器电平敏感,锁存信号无效时,输出总是随输入改变;2、详细:面试中按照简述中的答法,肯定是不够的;只有分析的全面透彻才能让人眼前一亮;总结:相同点:锁存器和寄存器均为具有记忆功能的二进制存贮器件直观区别:寄存器时钟边沿敏感,在时钟有效沿来临时输出才会随输入改变;锁存器电平敏感,锁存信号无效时,输出总是随输入改变;设计中避免出现锁存器的原因:锁存器电平敏感,锁存信号无效时latch相当于通路,

2020-10-12 11:25:27 694

原创 FPGA面试专题——地址生成器设计

1、题目:设计地址生成器。 [nVidia 2008]要求依次输出以下序列:0,8,2,10,4,12,6,14,1,9,3,11,5,13,7,15,16,24,18,26,.................................,31,32,40,34,42,.................................,47,48,56,50,58,.................................,63,64,72,66,74,.............

2020-10-12 11:25:10 607

原创 FPGA面试笔试专题——跨时钟域处理

跨时钟域处理时需要考虑两个方面:方面1:不同位宽,处理方式不同位宽为1,可以采用寄存器打两拍的方式; 位宽为多位时,需要采用异步FIFO、转换为格雷码、握手等;异步FIFO:通过异步读写,以及空满标志实现了跨时钟数据同步。转换为格雷码:利用相邻格雷码仅一位改变的特性,实现跨时钟域数据同步。握手:在具体实现中,假设 req、ack、data 总线在初始化时都处于无效状态,发送域先把数据放入总线,随后发送有效的 req 信号给接收域。接收域在检测到有效的 req 信号后锁存数据总线,然后回送

2020-10-12 11:24:29 1060

原创 FPGA面试专题——触发器

1、触发器与锁存器2、D触发器触发器概念verilog描述电路分析3、JK触发器JK触发器功能(JK=00,q=q;JK=01,q=0;JK=10,q=1;JK=1,q=~q;)verilog描述4、T触发器T触发器功能(T=0,q=q;T=1,q=~q;)verilog描述锁存器和触发器的区别通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器)通过仿真和综合认识JK触发器(Verilog HDL语言描述JK触发器)...

2020-10-08 22:26:08 408

转载 贝塞尔曲线(Bezier Curve)原理及公式推导

1. 定义贝塞尔曲线(Bezier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。贝塞尔曲线是计算机图形学中相当重要的参数曲线,在一些比较成熟的位图软件中也有贝塞尔曲线工具,如PhotoShop等。贝塞尔曲线的一些特性:使用 n n n个控制点 { P 1 , P 2 , . . . , P n } \{

2020-10-04 11:18:24 7054

原创 十进制小数定点化

1、题目 在FPGA中做小数乘法时,一般需要对定点小数量化处理。量化过程中首先需要确定量化的位宽,位宽越大量化的精度越高。如题所述,对12.918做无损定点化,首先需要确定对整数部分的量化位数。整数为12,无损量化必须采用4bit;小数部分为0.918,假如采用12bit位宽,整数部分4bit,那么小数部分只有8bit。8bit所能表达的最大的整数为255(注意,定点小数在FPGA运算过程中是没有小数点的,比如12.918,实际存储的是12.918的二进制形式,所以8bit表示小数部分最大为

2020-08-25 22:26:05 1996

转载 数字电路基础知识—— 组合逻辑电路中的竞争与冒险(竞争与冒险、检验方法、及消除方法)

在数字逻辑设计中,并不是说最简的逻辑表达式在设计组合逻辑时一定是最优的,可能就会出现本次介绍的竞争与冒险问题,所以需要了解竞争与冒险的检验以及竞争与冒险的避免消除方法。一、竞争与冒险现象及其形成原因两个输入信号同时向相反方向的逻辑电平跳变的现象(即一个由1- > 0, 另一个从0 -> 1),称为竞争。因竞争导致在输出端可能产生尖峰脉冲的现象,称为冒险。通俗一点的说,信号由于经由不同路径传输达到某一汇合点的时间有先有后的现象,就称之为竞争,由于竞争现象所引起的电路输出发生瞬间错误的

2020-08-25 17:59:19 37165

转载 Verilog有哪些运算符及其优先级

目录1、算术运算符2、关系运算符3、逻辑运算符4、条件运算符5、位运算符6、移位运算符7、拼接运算符8、运算符的优先级Verilog中的运算符按照功能可以分为下述类型:1、算术运算符、 2、关系运算符、 3、逻辑运算符、 4、条件运算符、 5、位运算符、 6、移位运算符、 7、拼接运算符。1、算术运算符算术运算符,简单来说,就是数学运算里面的加减乘除,数字逻辑处理有时候也需要进行数字运算,所以需要算术运算符。符号 使用方法...

2020-08-25 09:38:31 7026

原创 Verilog中“==”和“===”的区别

“===”和“==”不同体现在对含有不定制X和高阻态Z数据的处理中:先说结论:==为逻辑相等,没有x/z时相同输出1,不同输出0;有x/z时,若其余位相同,输出是x,其余位不同,输出为0; !=为逻辑不等,没有x/z时相同输出0,不同输出1;有x/z时,若其余位相同,输出是x,其余位不同,输出为1; ===与!===为逻辑全等和逻辑不全等,x/z当作普通元素处理。本质:===与!==将x/z按照普通元素看待,进行比较;==不能识别x/z,其余位相同时,因为存在x/z位无法判断比较结果,

2020-08-25 09:23:04 8892

转载 Cache相关知识

Cache映射关系直接映射缓存考虑一个问题,CPU从0x0654地址读取一个字节,cache控制器是如何判断数据是否在cache中命中呢?cache大小相对于主存来说,可谓是小巫见大巫。所以cache肯定是只能缓存主存中极小一部分数据。我们如何根据地址在有限大小的cache中查找数据呢?现在硬件采取的做法是对地址进行散列(可以理解成地址取模操作)。我们接下来看看是如何做到的?我们一共有8行cache line,cache line大小是8 Bytes。所以我们可以利用地址低3 bits(如上

2020-08-19 11:46:55 470

转载 C/C++程序内存的分配

一、一个C/C++编译的程序占用内存分为以下几个部分:栈区(stack):由编译器自动分配与释放,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。其操作类似于数据结构中的栈。 堆区(heap):一般由程序员自动分配,如果程序员没有释放,程序结束时可能有OS回收。其分配类似于链表。 全局区(静态区static):存放全局变量、静态数据、常量。程序结束后由系统释放。全局区分为已初始化全局区(data)和未初始化全局区(bss)。 常量区(文字常量区):存放常量字符串,程序结束后有系统释

2020-08-16 10:13:19 196

原创 C语言之-volatile\extern关键字及其在DSP编程中的应用

一、简述1、extern关键字定义方式 :extern int a;显式的说明了a的存储空间是在程序的其他地方分配的,在文件中其他位置或者其他文件中寻找a这个变量。在a.c文件中要引用b.c文件中的变量时,需要在a.c文件中用extern声明所用到的变量。2、volatile关键字定义方式:volatileintvint;简单地说就是防止编译器对代码进行优化。二、volatile关键字详解volatile关键字的本质为:1、防止编译器优化代码2、告..

2020-08-08 11:16:12 602

原创 memcpy()函数

一、函数定义void * memcpy ( void * destination, const void * source, size_t num );将source指向的地址处的 num 个字节 拷贝到 destination 指向的地址处。注意,是字节。 实现:void* memcpy(void* dest, const void* source, size_t count){ char *ret = (char *)dest; char *dest_t =

2020-08-07 21:18:53 338

原创 sizeof()与#pragma pack()的使用

一、sizeof使用sizeof(a)返回数据a对应的字节(byte)数二、#pragma pack()的使用1、结构体的对齐系数结构体存在对齐系数,即结构体中的数据间并不是无缝连接的,而是有一个对其系数作为最小存储单位的。一个数据实际使用的内存大小为 N*对齐系数,N是使得这一部分内存大于等于数据真实大小的最小空间。如:对齐系数为4byte,char形数据实际占据了4byte空间而不是1byte2、#pragma pack()每个特定平台上的编译器都有自己的默认“对齐系数”(3

2020-07-31 11:52:04 339

原创 C语言中const常见用法

一、解析const int a;int const a;const int *a;//即 (const int) *a;int * const a;//即 (int) * const a;const int * const a;int const * const a;前两个的作用一样,表示a是一个常整型数,意味着int形的数a不可修改,只能声明时赋值; 第三个表示a是一个指向常整型数的指针(整型数是不可修改的,但指针指向可修改),如:const int b=2;const .

2020-07-31 11:24:41 544

转载 32位机器和64位机器中int、char等数据类型所占字节长度对比

在32位机器和64机器中int类型都占用4个字节。编译器可以根据自身硬件来选择合适的大小,但是需要满足约束:short和int型至少为16位,long型至少为32位,并且short型长度不能超过int型,而int型不能超过long型。这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。下面列举在GCC编译器下32位机器和64位机器各个类型变量所占字节数:C类型 32位机器(字节) 64位机器(字节) c

2020-07-31 11:03:01 2244

原创 LUT的原理与结构

查找表(look-up-table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有 4位地址线的16x1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一组信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。...

2020-07-28 17:23:23 2586

原创 逻辑代数常用公式及其推导

一、基本公式1、变量与常量运算规则:0*A = 0 0+A = A 1*A = A 1+A = 1 2、重叠率:A*A = A A+A = A 3、互补率:A*A' = 0 A+A' = 1 4、交换率、结合律 、以及分配律A*B = B*A A+B = B+A A*(B*C) = (A*B)*C A+(B+C) = (A+B)+C A*(B+C) = A*B+A*C A+B*C = (A+B)*(A+C) 5、反演律

2020-07-27 22:31:03 21913 1

原创 常见接口简介与比较——UART、IIC与SPI

一、UART1、简述通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是异步串行通信的总称,不表示具体的协议。RS232、RS422、RS485等都属于UART,只是它们的接口协议、电气特性、传输速率和机械结构不同而已。2、协议数据线:UART有两根数据线,TX为数据发送线,串行的由低位到高位发送数据;TR为数据接受线,串行的由低位到高位接收数据;数据格式/内容:UART通信的一帧一般由 { 起始位+数据+奇偶

2020-07-27 10:53:28 1671

原创 反码、原码和补码的引入与转换

参考链接中对原码、反码补码的来由与相互之间的转换进行了详细讲解,精彩至极!笔者此处只是记录了一些自己的笔记便于日后翻阅理解(红色字体部分);目录一、原文(一)预备知识(二)原码(三)反码(四)补码(五)补码的思想(六)补码实例(七)为何这样求补码二、补充与注释三、原文地址一、原文本文从原码讲起。通过简述原码,反码和补码存在的作用,加深对补码的认识。力争让你对补码的概念不再局限于:负数的补码等于反码加一。接触过计算机或电子信息相关课程的同学,应该都或多或

2020-07-24 23:22:08 506

原创 verilog中系统任务函数$random的使用

一、使用$random可以产生一个有符号的32bit随机整数,一般的用法为:1、产生随机整数:num = $random%b其中,b为十进制整数;则num为范围在 -(b-1):(b-1) 中的随机数2、产生随机正整数: num = {$random}%b其中,b为十进制整数;则num为范围在 0:(b-1) 中的随机数二、仿真产生20次-100~100的随机数;随后产生20次0-100的随机数:module random_tsb( );re

2020-07-17 10:24:24 31043 6

原创 奇偶校验及其在UART中的应用

一、奇偶校验概念奇偶校验(Parity Check)是一种根据被传输的一组二进制数中"1"的个数是奇数还是偶数来校验数据传输正确性的方法。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组数据和奇偶校验位中"1"的个数为奇数或偶数。奇校验:让传输数据(包含校验位)中1的个数为奇数。即:如果传输字节中1的个数是偶数,则校验位为“1”,奇数相反。数据和校验位发送给接受方后,接收方再次对数据中1的个数进行计算,如果为奇数则校验通过,表示此次传输过程未发生错误。如果不是奇数,则表示有错误发生

2020-07-15 22:20:01 5777 1

原创 vivado中Cordic IP核使用——计算正余弦(sin/cos)

目录1、Cordic算法介绍2、Cordic IP核介绍3、仿真4、存在的问题5、参考1、Cordic算法介绍cordic算法将正余弦计算转换为简单的迭代过程(一系列的加减和移位操作), 非常适合硬件实现,是对正余弦等数学计算的逼近。 以旋转过程为例,简述cordic算法思想(计算正余弦可以认为起始点P在x轴上,旋转结果的xy坐标即为旋转角度的cos、sin):和差化积公式:...

2020-07-08 16:30:45 10271 2

原创 流水线设计实例——8位全加器设计

目录1、简介2、实例3、部分代码4、参考1、简介系统的最高工作频率,取决于系统中耗时最长的模块延时。模块延时越长,系统的工作频率就越低,反之则越高。流水操作的思想就是将耗时较长的模块拆分为多个子模块的级联,子模块之间通过寄存器连接。这种设计方式带来的好处是显而易见的:流水处理之前,每一次操作所需时间均为A,较大的模块延迟导致系统工作频率下降。 流水处理之后,模块被划分为N个子模块的级联,子模块的操作延迟为B(B<A)。此时,除刚开始输入数据时需要延迟B*N才能得.

2020-07-07 17:00:22 2977

原创 模块输出不定态X(高阻态Z)

问题:调用复乘IP核计算复数乘法,IP核m_axis_dout_tdata输出正常数据,但是将IP输出划分,分别赋值给实部o_real以及虚部o_imag输出时,实部出现X,虚部出现Z;原因:模块例化时m_axis_dout_tdata的实部虚部均赋值给实部o_real,对应的虚部o_imag未被赋值;赋值冲突出现X 未赋值以及初始化可能出现Z...

2020-07-07 09:20:07 3178

转载 FPGA中如何控制电路使用的是Block RAM还是Distributed RAM

FPGA可以调用分布式RAM和块RAM两种RAM,当我们编写verilog代码的时候如果合理的编写就可以使我们想要的RAM被综合成BRAM(Block RAM)或者DRAM(Distributed RAM),其中BRAM是block ram,是存在FPGA中的大容量的RAM,DRAM是FPGA中有LU...

2020-07-06 21:48:49 2301

原创 Vivado中FFT9.1 IP核的使用(4)——SCALE_SCH缩放设置

在Vivado中FFT9.1 IP核的使用(3)——线性调频信号FFT的基础上,对SCALE_SCH进行测试1、SCALE_SCH介绍SCALE_SCH对FFT过程的缩放进行设置:SCALE_SCH对FFT变换各阶段的缩放进行设置,长度与FFT方式和变换长度有关,比如基2FFT,1024点,对应阶段数为10; 每阶段使用两位进行设置,可以设置为0-1-2-3,对应移位位数,反映在缩放倍数上实际为:0-2-4-8倍; SCALE_SCH从高到低,分别对应FFT最后阶段到初始阶段;2、仿真

2020-07-06 16:58:33 4672 3

原创 使用IP核例化ROM并初始化

1、使用IP核例化ROM可以选择使用Block RAM实现还是使用Distributed RAM实现:使用Distributed RAM实现时,占用LUT资源,仿真如下:使用Block RAM实现时占用专用RAM资源:Distributed RAM使用灵活,但是占用LUT资源,常用于数据量较小的场合;Block RAM是专用RAM资源,常用于数据量较大的场合;bram 的输出需要时钟,dram在给出地址后既可输出数据。 dram使用根灵活方便些 bram有较大的存储空间,..

2020-07-06 15:39:13 3695 1

原创 Vivado中FFT9.1 IP核的使用(3)——线性调频信号FFT

1、简述线性调频信号FFT与之前的8点、32点FFT在IP核的使用方面并没有什么不同;唯一需要注意的就是仿真中线性调频信号如何产生,如何读取到vivado,以及数据位宽。此处以Matlab生成数据,导入到Vivado进行处理,并不代表数据只能这样产生和传入:LFM信号产生:Mtalab生成对应参数下的LFM信号信号存储:Mtalab中生成的LFM信号按照二进制存储到TXT文件(Vivado中一般按照2进制、16进制读取数据)Vivado读取数据:Vivado读取TXT中数据,作为FFT输入

2020-07-03 09:21:06 3377

原创 Verilog实现FIR滤波器

1、FIR滤波器简介不追究FIR滤波器的深层含义,我们只关注如何实现;可以看出,FIR滤波器的本质就是延迟、系数相乘与求和,如下图:2、设计基于以上分析,按照三级流水实现FIR滤波器设计:信号延迟-系数相乘-求和`timescale 1ns / 1psmodule fir(input clk,input rst_n,input [3:0]din,output reg [9:0]dout );// data regreg [3:0]din1;reg [3:.

2020-07-02 11:04:34 9148

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除