傻童:CPU
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
FPGA使用乘法的方式
(2)建议乘法运算结果再打一拍,至少保持2个周期的延迟,改善代码时序,可兼容更高时钟频率下运行。(1)存储乘法运算结果的寄存器位宽,等于2个乘数的位宽之和。具体使用可以参看官网使用手册。原创 2023-12-12 23:15:07 · 862 阅读 · 0 评论 -
画时序图--WaveDrom使用向导
每个wavane都有两个必填字段:“name”和“wave”。它也可以有一个可选的标记在工作边缘。时钟的块可以与其他信号状态混合,以创建时钟门控效果。波形可以统一为命名组,命名组以数组的形式表示。数组的第一个条目是组的名称。“wave”字符串中的每个字符代表一个时间周期(时间段)。符号“.”将之前的状态延长一段时间。典型的时序图会有时钟和信号(电线)。下面的代码将创建一个名为“Alfa”的1bit信号,它会随时间改变其状态。“周期”和“相位”参数可以用来调整每个波长。配置:{}属性控制呈现的不同方面。原创 2023-11-15 10:43:49 · 622 阅读 · 0 评论 -
FIFO的控制模块
模块功能:当 FIFO 为空时,向 FIFO 中写入数据,写入的数据量和 FIFO 深度一致,即 FIFO 被写满;然后从 FIFO 中读出数据,直到 FIFO 被读空为止。第一步生成FIFO的IP核。原创 2022-10-27 22:54:50 · 598 阅读 · 0 评论 -
Verilog-状态机
在设计状态机之前,最好画出状态转移图。原创 2022-10-23 22:06:21 · 250 阅读 · 0 评论 -
vivado使用
引脚的查找,可以通过文档的搜索。vivado的开发流程。创建一个时序约束文件。原创 2022-10-22 11:46:07 · 241 阅读 · 0 评论 -
编写vivado的仿真代码
先点击+号图标,选择add or create simulation sources。输入信号是reg型,输出信号是wire型,首先要对输入信号初始化。如果还有其他输入,设置输入的各种情况后,在进行功能型仿真。一般是使用先使用重新回到最初位置,在重新运行仿真一次。当你修改源文件代码之后,先保存源文件。然后点击重新运行一下即可。原创 2022-10-21 23:20:38 · 1178 阅读 · 0 评论 -
硬件调试-ILA
先点击连续触发,在点击开始触发时,就会进入到连续触发模式。只有点击停止触发时,才会停止触发。然后点击连续触发,就会取消连续触发。立即触发:是不管是否有信号变化,都会触发。方式二,右击ILA的IP,选择Remove File from Project并且把勾勾打上。彻底的删除,方式一:找到ILA的IP文件夹,删除文件夹。可以看出,输出和计数都不对,所以要重新回到代码上检查。最重要的是设置触发条件,看是否出现期望的值。然后进行连续触发,这样是为了充分的验证。首先需要,进行单次触发。然后重新生成Bit流。原创 2022-10-20 23:42:00 · 284 阅读 · 0 评论 -
MATLAB代码转到FPGA代码
添加完文件之后,需要设置输入的数据类型,设置完之后点击Workflow Advisor。MATLAB文件包含一个功能实现文件和测试文件。对应FPGA中的功能文件和测试文件。然后,将功能文件和测试文件添加到相应位置。然后选择APP中的HDL Coder代码。首先需要编写好MATLAB文件。点击链接,就可以查看你看到的代码。可以自己生成代码的语言类型。原创 2022-10-20 16:14:05 · 2581 阅读 · 2 评论 -
实现数学函数
采用这个结构,被除数被“归一化”为一个定点数值,必须小于两倍的除数,做到这一点,每个依次的移位操作将产生一个新的必须小于两倍除数的部分商。这意味着将“进入”部分商1或0倍。如果除数小于或等于当前迭代的部分被除数,一个逻辑1移位进商的寄存器,否则,逻辑0移位进去,部分被除数左移1,在需要的迭代次数达到希望的精度,把数据移位到正确的定点位置,后置归一化输出。当高速除法操作需要流水线来最大化流量时,可以利用Goldschmidt方法,这个方法属于逐步逼近算法的类别,随着算法的每次递推得到真正的商。原创 2022-10-06 15:32:29 · 401 阅读 · 0 评论 -
时钟 区域
如果其中至少一个时钟是在FPGA内部通过PLL(锁相环)或DLL(延迟锁相环)可控制的,另一个时钟与在PLL或DLL解决方案中那个时钟周期有倍数关系,相位匹配可用来消除时序冲突。ASIC设计对功耗常常有严格的要求,因为在ASIC时钟树设计中的灵活性,门控时钟分布在整个芯片来禁止不要求的任何活动是很通常的。当一个时钟的周期是另一个的倍数,并且其中一个时钟可以由内部PLL或DLL控制时,就可以使用相位控制技术。如果大量的时钟在ASIC中被选通,推介把选通操作考虑成专门为产生时钟的单个模块。原创 2022-10-06 09:45:04 · 881 阅读 · 0 评论 -
高级 设计
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。DSP设计是另一个更大程度符合抽象化设计技术的,因为任何有相当复杂度的DSP设计都已经在更高的抽象级别进行。传统来看,DSP算法都是用这些高级的数学工具来设计和分析的,一旦设计被验证了,设计者必须以FPGA为目标人工地将这些算法转换成可综合的结构。原创 2022-10-05 09:51:05 · 465 阅读 · 0 评论 -
功耗结构设计
电容C直接与随时被触发的门的数量以及连接这些门的布线长度有关,频率f直接与时钟频率有关。由于时钟源到达不同寄存器所经历路径的驱动和负载的不同,时钟边沿的位置有所差异,因此就带来了skew。在同步数字电路中降低动态功耗的最有效和广泛使用的技术是动态禁止在特定区域中的时钟,在数据流中这个区域不需要在特定级激活。推介的方法是利用触发器的时钟使能引脚,或利用全局时钟的多路选择器(mux)。有时会借助直接选通系统时钟的方法。由于功耗是与信号触发频率成正比的事实,高扇出网线的每个触发功能数量的最大化是所期望的。原创 2022-10-04 19:44:36 · 403 阅读 · 0 评论 -
面积结构设计
A表示定点刚好在最低有效位(LSB)右边的归一化整数格式,输入B的定点刚好在最高有效位(MSB)左边,换而言之,B与A比例从0到1。对于面积是主要要求的紧凑设计,搜索在其他模块中有类似计数部件的资源,可以把他们放在层次上的全局位置,在多个功能范围范围之间共享。优化的FPGA资源在不相容的复位分配到它时将不被利用,但利用一般的元件实现其功能将占用更多的面积。只要有功能块可以在设计的其他部分或者甚至在不同的模块利用,就可以利用这类资源共享。不正确的复位策略可以产生不必要的大的设计和抑制一些面积优化。原创 2022-10-04 18:43:00 · 433 阅读 · 0 评论 -
高速度结构设计
时序定义为时序元件之间的逻辑延时,当一个设计没有满足时序时,意味着关键路径的延时,即触发器之间的最大延时比预定的时钟周期大,这些延迟由组合逻辑延时、时钟到输出延时、布线延时、建立时间、时钟偏移等组成。高流量设计是与稳定状态数据率有关的设计,但很少设计任何规定的数据段通过设计要求的传播时间(时滞)。可以重新安排与关键路径组合的路径来改善时序,方法是关键路径的一些逻辑放置到接近目的寄存器。把一个逻辑功能分成大量可以并行估值的更小的功能,减少路径延时时为子结构的最长延时。流量的通常度量是每秒的位数。原创 2022-10-02 20:16:10 · 603 阅读 · 0 评论 -
卡尔曼滤波器
在信号处理、通信和现代控制系统中,需要对一个随机动态系统的状态进行估计。由一个测量装置对系统状态进行测量,这个测量过程是间接的和有噪的,通过记录的观测值对状态进行最优估计,并且这种估计是递推进行的,这是卡尔曼滤波(Kalman Filter,KF)所解决的问题。目的是找到信号x 的估值 ,。并且希望能对所有的k值都能找到对应的估值。记住:前一状态的估值将成为当前状态的输入。噪声参数越接近实际,输出真实值就越好。过程噪声和测量噪声互相统计独立。决定一些必要的参数以及初始值。基于卡尔曼滤波器的PID 控制。原创 2022-09-13 12:46:58 · 1239 阅读 · 0 评论 -
PID控制原理
所谓积分饱和现象是指若系统存在一个方向的偏差,PID控制器的输出由于积分作用的不断累加而加大,从而导致执行机构达到极限位置Xmax(阀门开度达到最大),若控制器输出u(k)继续增大,阀门开度不可能再增大,此时就称计算机输出控制量超出了正常运行范围而进入饱和区。但过程的启动、结束或大幅度增减设定时,短时间内系统输出有很大的偏差,会造成PID运算的积分积累,致使控制量超过执行机构可能允许的最大动作范围对应的极限控制量,引起系统较大的超调,甚至引起系统较大的振荡。(积分时间常数的定义是,偏差引起输出增长的时间。原创 2022-09-13 09:21:00 · 1717 阅读 · 0 评论 -
PCIE下载的驱动安装
window+r显示运行窗口,输入cmd。原创 2022-07-30 13:05:21 · 1626 阅读 · 2 评论 -
PCIE入门
根据原理图,对端口进行约束。没有显示就保持默认即可。修改一些连线和端口。原创 2022-07-30 12:52:36 · 300 阅读 · 0 评论 -
关键路径的分析
组合逻辑的延时过长,就会成为关键路径,这时可以考虑在该路径上插入额外的寄存器,这种方法也称为插入流水线,多用于高度流水的设计中,因为这种设计中额外插入寄存器增加的时钟周期延时并不会违反整个设计的规范要求,从而不会影响设计的总体功能性实现,也即额外插入的寄存器在保持吞吐量不变的情况下改善了设计的时序性能。当某个信号的扇出fanout比较大时,会造成该信号到各个目的逻辑节点的路径变得过长,从而成为设计中的关键路径,此时可以通过对该信号进行复制来降低扇出。case,是的顺序执行的语句编程并行执行。...原创 2022-07-28 18:50:43 · 1456 阅读 · 0 评论 -
基于Xilinx的时序分析与约束
时序分析主要有两种办法静态时序分析(statictiminganalysis,STA),是遍历电路存在的所有时序路径,根据给定工作条件(PVT)下的时序库.lib文件计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足约束要求,根据最大路径延时和最小路径延时找出违背时序约束的错误。动态时序分析了解了时序分析后,其实时序约束也就好理解了。简单来讲,时序约束就是你要告诉综合工具,你的标准是什么。综合工具应该如何根据你的标准来布线,以满足所以寄存器的时序要求。......原创 2022-07-27 14:43:37 · 346 阅读 · 0 评论 -
AMBA APB介绍
APB是AMBA总线体系中的一部分并且优化了最小功率消耗和降低了接口复杂度。AMBA APB表现为一个局部二级总线,封装为AHB或者ASB的一个外设。APB在AHB和ASB信号的基础上直接为系统总线提高了低功耗的延伸。APB桥作为一个从模块处理总线握手并且从局部外设总线的角度控制信号的时序更新。通过从系统总线起始点定义APB接口,可以有效的利用系统诊断和测试方法的好处。AMBA APB应该被用作任何低带宽和不需要通过总线接口的高性能的外设接口。最新版本的APB规定所有信号的传输只和时钟的上升沿相关。原创 2022-07-12 17:56:12 · 695 阅读 · 0 评论 -
线性反馈移位寄存器(LSFR)
理论表明,要使LFSR得到最长的周期,这个抽头序列构成的多项式加1就是其反馈多项式,必须是一个本原多项式,也就是说这个多项式不可约,比方下图的抽头序列为,其对应的反馈多项式为,其对应的线性反馈移位寄存器电路如下所示。其中,gn为反馈系数,取值只能为0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路;这里的反馈系数决定了产生随机数的算法的不同。反馈函数为线性的叫线性移位反馈序列,否则叫非线性反馈移位序列。其主要应用在伪随机数,伪噪声序列,计数器,BIST,数据的加密和CRC校验等。...原创 2022-07-22 19:46:34 · 9689 阅读 · 0 评论 -
FPGA出错的积累
语法出错!(多写或者少写)原创 2022-07-22 12:04:34 · 509 阅读 · 0 评论 -
标志信号(flag)
脉冲标志信号(flag),它可以减少代码中if括号内的条件让代码更加清晰简洁,而且当需要在多处使用脉冲标志信号的地方要比全部写出的方式更节约逻辑资源,脉冲标志信号在指示某些状态时是非常有用的,当大家以后在实现相对复杂的逻辑功能时注意想到使用脉冲标志信号,后面我们还会介绍到另一个有用的信后——使能信号。...原创 2022-07-19 22:28:05 · 1206 阅读 · 2 评论 -
FPGA内部硬件结构与代码的关系
给一个输入信号,然后不进行任何逻辑运算直接输出。与逻辑真值表原创 2022-07-05 23:29:19 · 275 阅读 · 0 评论 -
建立时间和保持时间的模型分析
起点是源触发器D1的采样时刻,终点是目的触发器D2的采样时刻,假设起点已经满足了建立时间和保持时间要求,现在分析终点采样时刻是否同样满足要求。其中触发器的行为:时钟沿到来时采样数据D,将采到的数据寄存下来,并输出到Q端,所有如果没有新的时钟沿到来,则Q端输出的一直是上次采样的数据,每来一个时钟沿,采样一次数据D。假设clk传输没有延时:则每一个时钟上升沿都会同时到达D1和D2。时间起点,第一个时钟沿D1的采样时刻,时间终点,第二个时钟沿D2的采样时刻。物理起点,D1的输入端,物理终点,D2的输入端。建立原创 2022-07-05 10:46:50 · 246 阅读 · 0 评论 -
Glitch Free时钟切换技术
两个时钟切换电路。Glitch Free为无毛刺切换电路。第一种时两个时钟源的频率呈倍数关系,第二种是两个时钟源完全没有关系,异步时钟。下面是使用AND-OR型多路复用器逻辑进行简单的时钟切换。下图针对的是两个时钟源频率成倍数关系。在每个时钟源的选择路径中插入一个下降沿触发的D触发器,这样可以保证上面的情况被避免,确保在切换时钟源时,即使任意时钟处于高电平,也不会引起输出的变换,时钟源切换时,这个反馈能保证一个时钟被完全取消选择后,输出传播另一个时钟,从而避免产生任何毛刺。第二种方法是针对两个原创 2022-06-30 16:32:09 · 763 阅读 · 0 评论 -
EPP (Enhanced Parallel Port 增强型并口)
EPP使与PC的通信快速和容易。这里我们使用Pluto-P FPGA板与启用epp的PC通信。EPP是IEEE 1284(并行端口标准)的一部分。IEEE 1284还定义了SPP和ECP,但EPP提供了两者的最佳特性,即速度和简单性。EPP的主要特点是:EPP允许“地址”和“数据”事务。换句话说,可从个人电脑发出四类资源增值事务:我们将FPGA连接到EPP端口。当PC做一个“写地址”(或“写数据”),它实际上只是发送8位FPGA的指示,这是一个“地址”或“数据”。FPGA可以使用“地址”或“数据”原创 2022-06-12 17:22:33 · 1094 阅读 · 0 评论 -
I2C接口
I2C总线是一种简单的方法来连接多个芯片,特别是fpga / cpld。I2C总线的特点但它是如何工作的一个I2C总线至少需要一个I2C主总线和一个I2C从总线。I2C主服务器是一个事务启动器(主服务器可以向从服务器写或从服务器读)。I2C从站是一个事务接收端(从站可以向主站写入或从主站读取)。I2C波形这是它在公共汽车上的样子。这是对地址为0x51的EEPROM的写操作,包含2个数据字节0x50和0x0F。一个I2C事务以一个“开始”条件开始,后面是我们想要与之通信的设备地址,一个比特表示我们原创 2022-06-12 17:09:51 · 1923 阅读 · 0 评论 -
JTAG接口
JTAG是IEEE标准(1149.1),于20世纪80年代开发,用于解决电子板制造问题。现在,它被更多地用于编程、调试和探测端口。但是首先,让我们看看JTAG最初的用途——边界测试。这是一个简单的电子板(也被称为“PCB”的“印刷电路板”),有两个集成电路(“集成电路”),一个CPU和一个FPGA。一个典型的电路板可能有更多的集成电路。集成电路可以有很多引脚。所以,集成电路当然是通过很多连接连接在一起的(PCB轨迹)。这里我们只展示了四个。但是在一个PCB上很容易有几千个。现在如果你建造一千块电原创 2022-06-12 16:32:21 · 3440 阅读 · 0 评论 -
串口(RS - 232)
串行接口是将FPGA连接到PC的一种简单方法。我们只需要一个收发模块。异步发射器它通过序列化要传输的数据来创建一个信号“TxD”。异步接收器它从FPGA外部接收信号“RxD”,并对其进行“反序列化”,以便在FPGA内部轻松使用。RS-232接口具有以下特点:DB - 9连接器你可能已经在你的电脑后面看到了这个连接器。它有9个引脚,但3个重要的是:只需使用3条线,就可以发送和接收数据。数据通常是由8位的数据块(我们称之为字节)发送的,并被“序列化”:首先发送LSB(数据位0),然后是位1,原创 2022-06-12 16:08:10 · 924 阅读 · 0 评论 -
PID笔记
在t时刻:PID的控制规律为:假设是规定为直流电机调速的。输入量rin(t)为电机转速预定值(转/min)。输出量rout(t)为电机转速实际值(转/min)。偏差量为预定值和实际值之差(转/min)。执行器为直流电机。传感器为光电码盘(10线)。为了得到实际的转速。直流电机采用PWM调速转速,单位为转/min表示。问题一:通过PID环节后的u(t)是什么值?问题二:控制执行器(直流电机)转动转速应该为电压值(也就是PWM占空比)?问题三:u(t)与PWM之间存在怎样的联系?PID控制其实是原创 2022-06-07 18:35:40 · 557 阅读 · 0 评论 -
基于断言的验证
断言的概念十分简单。只要在程序中声明,我们相作言某事情必定为真,若不为真,则在屏幕上打印错误信息即可。在 SystemVerilog语言中,断言可以用立即(immediate)和并发(concurrent)两种不同形式的断言来表示。立即断言十分简洁,可以用if、else等语句表示。而并发断言的功能十分强大,所以本节用大部分篇帽福讲解如何编写并发断言。在 always过程块中可以把这个事实声明为立即断言(该立目即断言相当于一个always_comb过程块,但是为了避免概念混淆,我们只在可综合的RTL模块中使用原创 2022-06-06 14:08:02 · 589 阅读 · 0 评论 -
面向对象的编程
面向对象编程(OOP)原本属于软件开发方法学范畴,似乎与SystemVerilog这一类硬件描述语言没有任何关系。在传统的编程语言,例如C和FORTRAN中,程序根据数据结构进行操作。在 SystemVerilog语言的过程块(例如initial和always块)中,程序的运行与传统的编程语言十分类似。**所谓面向对象编程,其实就是把程序内部的执行细节放到程序外部进行描述;把数据结构和函数对数据结构的操作置于多个类的声明中,然后实例引用这些类,并把它们转变成具体的对象,再组装成可以执行的程序。**虽然Sys原创 2022-06-06 13:08:26 · 203 阅读 · 0 评论 -
时序构成的测试平台
在任何类型的设计中,最重要的信号是时钟信号。把信号电平按照规定的时间间隔反相,就可以产生时钟信号,这是最简单时钟信号发生器。任何信号的默认值为“x”。若只是把某个信号按照规定的时间间隔反相,将把“x”值反相。下面的代码不能产生时钟信号的原因就在于此;按照这个代码,时钟信号将永远为不定态“x”。发生错误的原因是忘记设置时钟信号的初始值。只要添加设置时钟初始值语句,就可以解决这个问题:**最好把每个信号初始值的设置和发生编写在一个过程块中。**举例说明如下:下面的例子描述了时钟频率和占空比都是参数的时钟原创 2022-06-05 17:04:04 · 169 阅读 · 0 评论 -
使用Systemverilog描述状态机
系统的状态必须保存在内部寄存器中。在SystemVerilog语言中,状态可以用枚举类型(enumerated type)表示。这种类型的可能值是状态名,而变量名列在一系列可能值的后面。例如:在下面的代码中,有两个过程块。每个过程块都标有自己的名字。第一个标有SEO的过程块描述了一个状态机。该过程块等待时钟的正跳变沿的到来,或者等待复位信号的负跳变沿的到来。首先测试的是异步复位信号,如果复位信号的负跳变沿到来,则默认值G被赋值给状态变量state。否则,跳转到case语句分支,根据当前的状态值进人不同的分原创 2022-06-05 15:51:01 · 779 阅读 · 0 评论 -
触 发 器
由正跳变沿触发的D触发器的最简单的SystemVerilog模型如下所示:因为这是时序逻辑,所以必须用非阻塞赋值。同样,负跳变沿触发的触发器可以通过检测逻辑电平从1跳变到0来建立模型。这两个输入应该只用于触发器的初始化。在系统正常运行期间,用R和S信号来设置触发器的状态是一个坏习惯,必须改正。这样做是因为在同步系统中,触发器的状态改变只允许由时钟的跳变沿触发。由于置位或复位输人信号是异步的,因此不能确保触发器输出的改变发生在特定时刻。这会引起各种时序问题。总而言之,在设计中必须保持严格的同步,或者遵循结原创 2022-06-04 22:11:28 · 493 阅读 · 0 评论 -
组合逻辑块的测试平台
测试平台是不需要综合的,因此SystemVerilog的所有语法都可以用来编写测试平台。测试平台的模块不需要声明输入和输出,测试平台包括了被测试对象、产生测试激励的信号源及观察或记录被测对象输出的机制。测试平台通常实现两大功能:1)产生被测模块所需的输入激励:2)检查被测模块的输出结果。在实例引用加法器adder时,用到一个参数(N)和一个将激励信号与加法器连接的端口匹配符(*)。只有当测试平台中的线网和变量名与被实例引用的模块的端口名完全一致时,才允许使用这种简化的端口连接方法。请注意,时间是相对的原创 2022-06-04 21:06:36 · 183 阅读 · 0 评论 -
使用SystemVerilog门模型描述的组合逻辑
组合逻辑是无状态的,换言之,输人的变化立即反映在输出的改变上。SystemVerilog的基本构造单元是模块(module)。模块描述从关键字module开始,接着是模块名和括号中的输入和输出列表。模块以关键字endmodule结束 请注意,在模块的第一句后有分 号“;”,但是在关键字endmodule后面没有分号。在上述例子中,该模型只有一条声明语句。用关键字 assign来表明所谓的连续赋值 (continuous assignment)语句(这将在后面解释)。x和y 的按位相与得到的值被赋给z。原创 2022-06-04 17:00:52 · 243 阅读 · 0 评论 -
格雷码与二进制的转换
格雷码转二进制是从左边第二位起,将每位与左边一位二进制码的值异或,作为该位二进制码后的值(最左边一位依然不变)。以其中一个为例:格雷码111->二进制101第一步:最左边不变->1**。得出二进制第一位为1第二步:从左往右.第三步:异或->10*。1^1得出二进制第二位为0第四步:将上一步的结果(二进制位)与格雷码异或->101。0^1得出二进制第三位为1从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变。以其中一个为例:二进制101->格雷码111原创 2022-06-04 11:28:42 · 25898 阅读 · 1 评论