傻童:CPU
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
stm32 作为从机, fpga 作为主机,进行 spi 通信
STM32和FPGA之间的SPI通信是直连形式。使用FPGA读取传感器的值,传输到STM32中进行计算。原创 2024-05-19 16:31:20 · 527 阅读 · 0 评论 -
FPGA使用乘法的方式
(2)建议乘法运算结果再打一拍,至少保持2个周期的延迟,改善代码时序,可兼容更高时钟频率下运行。(1)存储乘法运算结果的寄存器位宽,等于2个乘数的位宽之和。具体使用可以参看官网使用手册。原创 2023-12-12 23:15:07 · 735 阅读 · 0 评论 -
画时序图--WaveDrom使用向导
每个wavane都有两个必填字段:“name”和“wave”。它也可以有一个可选的标记在工作边缘。时钟的块可以与其他信号状态混合,以创建时钟门控效果。波形可以统一为命名组,命名组以数组的形式表示。数组的第一个条目是组的名称。“wave”字符串中的每个字符代表一个时间周期(时间段)。符号“.”将之前的状态延长一段时间。典型的时序图会有时钟和信号(电线)。下面的代码将创建一个名为“Alfa”的1bit信号,它会随时间改变其状态。“周期”和“相位”参数可以用来调整每个波长。配置:{}属性控制呈现的不同方面。原创 2023-11-15 10:43:49 · 603 阅读 · 0 评论 -
GWIN入门-完整一个程序
选择 program device,弹出的 programmer2 下载窗口,记住是 SRAM Program,选择正确的 fs 文件。在配置窗口选择,DUAL-PUROSE pin 选择 USE DONE as regular IO,设定为普通的 IO 功能。再次选择 process,右键选择 configuration。在主程序中,选择 design,看到有一个 cst 文件就是管脚约束文件,设定 IO 和电压要求。选择 scan 的按钮,找到芯片。选择箭头,编程设备,下载比特流。原创 2023-07-05 17:56:56 · 670 阅读 · 0 评论 -
FIFO的控制模块
模块功能:当 FIFO 为空时,向 FIFO 中写入数据,写入的数据量和 FIFO 深度一致,即 FIFO 被写满;然后从 FIFO 中读出数据,直到 FIFO 被读空为止。第一步生成FIFO的IP核。原创 2022-10-27 22:54:50 · 580 阅读 · 0 评论 -
Verilog-状态机
在设计状态机之前,最好画出状态转移图。原创 2022-10-23 22:06:21 · 235 阅读 · 0 评论 -
vivado使用
引脚的查找,可以通过文档的搜索。vivado的开发流程。创建一个时序约束文件。原创 2022-10-22 11:46:07 · 224 阅读 · 0 评论 -
编写vivado的仿真代码
先点击+号图标,选择add or create simulation sources。输入信号是reg型,输出信号是wire型,首先要对输入信号初始化。如果还有其他输入,设置输入的各种情况后,在进行功能型仿真。一般是使用先使用重新回到最初位置,在重新运行仿真一次。当你修改源文件代码之后,先保存源文件。然后点击重新运行一下即可。原创 2022-10-21 23:20:38 · 1088 阅读 · 0 评论 -
硬件调试-ILA
先点击连续触发,在点击开始触发时,就会进入到连续触发模式。只有点击停止触发时,才会停止触发。然后点击连续触发,就会取消连续触发。立即触发:是不管是否有信号变化,都会触发。方式二,右击ILA的IP,选择Remove File from Project并且把勾勾打上。彻底的删除,方式一:找到ILA的IP文件夹,删除文件夹。可以看出,输出和计数都不对,所以要重新回到代码上检查。最重要的是设置触发条件,看是否出现期望的值。然后进行连续触发,这样是为了充分的验证。首先需要,进行单次触发。然后重新生成Bit流。原创 2022-10-20 23:42:00 · 261 阅读 · 0 评论 -
实现数学函数
采用这个结构,被除数被“归一化”为一个定点数值,必须小于两倍的除数,做到这一点,每个依次的移位操作将产生一个新的必须小于两倍除数的部分商。这意味着将“进入”部分商1或0倍。如果除数小于或等于当前迭代的部分被除数,一个逻辑1移位进商的寄存器,否则,逻辑0移位进去,部分被除数左移1,在需要的迭代次数达到希望的精度,把数据移位到正确的定点位置,后置归一化输出。当高速除法操作需要流水线来最大化流量时,可以利用Goldschmidt方法,这个方法属于逐步逼近算法的类别,随着算法的每次递推得到真正的商。原创 2022-10-06 15:32:29 · 386 阅读 · 0 评论 -
时钟 区域
如果其中至少一个时钟是在FPGA内部通过PLL(锁相环)或DLL(延迟锁相环)可控制的,另一个时钟与在PLL或DLL解决方案中那个时钟周期有倍数关系,相位匹配可用来消除时序冲突。ASIC设计对功耗常常有严格的要求,因为在ASIC时钟树设计中的灵活性,门控时钟分布在整个芯片来禁止不要求的任何活动是很通常的。当一个时钟的周期是另一个的倍数,并且其中一个时钟可以由内部PLL或DLL控制时,就可以使用相位控制技术。如果大量的时钟在ASIC中被选通,推介把选通操作考虑成专门为产生时钟的单个模块。原创 2022-10-06 09:45:04 · 858 阅读 · 0 评论 -
高级 设计
抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。DSP设计是另一个更大程度符合抽象化设计技术的,因为任何有相当复杂度的DSP设计都已经在更高的抽象级别进行。传统来看,DSP算法都是用这些高级的数学工具来设计和分析的,一旦设计被验证了,设计者必须以FPGA为目标人工地将这些算法转换成可综合的结构。原创 2022-10-05 09:51:05 · 444 阅读 · 0 评论 -
功耗结构设计
电容C直接与随时被触发的门的数量以及连接这些门的布线长度有关,频率f直接与时钟频率有关。由于时钟源到达不同寄存器所经历路径的驱动和负载的不同,时钟边沿的位置有所差异,因此就带来了skew。在同步数字电路中降低动态功耗的最有效和广泛使用的技术是动态禁止在特定区域中的时钟,在数据流中这个区域不需要在特定级激活。推介的方法是利用触发器的时钟使能引脚,或利用全局时钟的多路选择器(mux)。有时会借助直接选通系统时钟的方法。由于功耗是与信号触发频率成正比的事实,高扇出网线的每个触发功能数量的最大化是所期望的。原创 2022-10-04 19:44:36 · 389 阅读 · 0 评论 -
面积结构设计
A表示定点刚好在最低有效位(LSB)右边的归一化整数格式,输入B的定点刚好在最高有效位(MSB)左边,换而言之,B与A比例从0到1。对于面积是主要要求的紧凑设计,搜索在其他模块中有类似计数部件的资源,可以把他们放在层次上的全局位置,在多个功能范围范围之间共享。优化的FPGA资源在不相容的复位分配到它时将不被利用,但利用一般的元件实现其功能将占用更多的面积。只要有功能块可以在设计的其他部分或者甚至在不同的模块利用,就可以利用这类资源共享。不正确的复位策略可以产生不必要的大的设计和抑制一些面积优化。原创 2022-10-04 18:43:00 · 421 阅读 · 0 评论 -
高速度结构设计
时序定义为时序元件之间的逻辑延时,当一个设计没有满足时序时,意味着关键路径的延时,即触发器之间的最大延时比预定的时钟周期大,这些延迟由组合逻辑延时、时钟到输出延时、布线延时、建立时间、时钟偏移等组成。高流量设计是与稳定状态数据率有关的设计,但很少设计任何规定的数据段通过设计要求的传播时间(时滞)。可以重新安排与关键路径组合的路径来改善时序,方法是关键路径的一些逻辑放置到接近目的寄存器。把一个逻辑功能分成大量可以并行估值的更小的功能,减少路径延时时为子结构的最长延时。流量的通常度量是每秒的位数。原创 2022-10-02 20:16:10 · 588 阅读 · 0 评论 -
简单使用Modelsim跑个仿真
简单使用Modelsim跑个仿真第一步:打开Modelsim第二步:点击File->New->Project(注意等待加载完了再去操作)第三步:输入工程名称->选择工程文件->ok第四步:添加激励文件和设计文件第五步:选中->编译第六步:进入work点击第七步:添加波形第八步:跑仿真附加信息Subline Text可以自动生生仿真模型右击->选择insert header...原创 2022-04-12 19:35:44 · 791 阅读 · 0 评论 -
任意奇数倍时钟分频
任意奇数倍时钟分频题目描述编写一个模块,对输入的时钟信号clk_in,实现任意奇数分频,要求分频之后的时钟信号占空比为50%。模块应包含一个参数,用于指定分频的倍数。模块的接口信号图如下:题目解读题目要求实现任意奇数倍数的分频,实现分频的基本方法是采用计数器,使用输入时钟信号驱动计数器。例如实现偶数倍的n分频时,每当计数器从0计数到n/2 - 1时,输出时钟信号跳变,同时计数器归零从新开始计数。题目要求的是奇数倍分频,且要求占空比为50%,则需要稍加调整:以五分频为例,需要输出时钟信号保持2.原创 2022-04-12 18:34:15 · 555 阅读 · 0 评论 -
求最小公倍数
求最小公倍数题目描述设计一个时序电路,输入2个无符号数,位宽可以通过参数DATA_W确定,输出这两个数的最小公倍数和最大公约数。模块的接口信号图如下:题目解读题目要求求解两个数的最小公倍数,而最小公倍数可以通过两个数的乘积除以两个数的最小公约数得到。乘法是容易计算的,所以问题变成如何求解最大公约数。可以采用辗转相减法求解,例如 :两个自然数35和14,用大数减去小数,(35,14)->(21,14)->(7,14),此时,7小于14,要做一次交换,把14作为被减数,即(14,7)-&原创 2022-04-12 18:25:51 · 2030 阅读 · 0 评论 -
异步复位同步释放
异步复位同步释放题目描述请使用异步复位同步释放来将输入数据a存储到寄存器中,并画图说明异步复位同步释放的机制原理信号示意图题目解读复位可以在任何时候发生,表面上看跟时钟没有关系,但真实情况是异步复位也需考虑时钟跳变沿,因为时钟沿变化和异步复位都可以引起Q端数据变化。同步复位虽然解决了当时钟的有效沿来临的时候rst的边沿也正好来临所出现的冒险与竞争。但是从综合的电路上可以看出,多了一个组合逻辑MUX。如果设计中所有的复位都是这样的,那会增加很多的资源,导致芯片面积很大,而异步复位同步释放机制可以解原创 2022-04-12 18:17:31 · 344 阅读 · 0 评论 -
串行进位加法器
串行进位加法器题目描述② 请用全加器电路①实现串行进位的4位全加器电路题目解读可将4个全加器串行相连,实现四位数串行进位加法器。原理图如下:`timescale 1ns/1nsmodule add_half( input A , input B , output wire S , output wire C );assign S = A ^ B;原创 2022-04-12 18:00:55 · 4082 阅读 · 0 评论 -
全 加 器
全加器题目描述请用题目提供的半加器实现全加器电路`timescale 1ns/1nsmodule add_half( input A , input B , output wire S , output wire C );assign S = A ^ B;assign C = A & B;endmodule/****************原创 2022-04-12 17:56:30 · 326 阅读 · 0 评论 -
乘法与位运算
乘法与位运算题目描述进行一个运算单元的电路设计,A[7:0]*11111011,尽量用最少的资源实现,写出对应的 RTL 代码。题目解析首先,考虑11111011是什么,其值为251,在乘法运算中可以将其分解为256 -4 -1,那么为什么是减去4和1呢 因为它们分别对应8‘b100和8’b1。A*251 = A*(256-4-1);在位运算中,2的整数倍运算可以直接使用移位进行,这样可以极大的减少资源占用`timescale 1ns/1nsmodule dajiang13(原创 2022-04-12 17:42:25 · 554 阅读 · 0 评论 -
超前进位加法器
超前进位加法器题目描述求两个四位的数据编写一个四位的超前进位加法器,建议使用子模块提示:超前进位加法器的位公式如下这里‘+’ ‘·’符号不是‘加’和‘乘’,是‘或’和 ‘与’题目解析题目要求4级可以表示为如下,这里P和G是传播信号和生成信号:`timescale 1ns/1nsmodule huawei8//四位超前进位加法器( input wire [3:0]A, input wire [3:0]B, output wire [4:0]OUT); wire [3:原创 2022-04-12 16:28:10 · 756 阅读 · 0 评论 -
状态机与时钟分频
状态机与时钟分频题目描述使用状态机实现时钟分频,要求对时钟进行四分频,占空比为0.25信号示意图题目解读首先考虑输入输出,作为分频电路,有一个时钟输入端,clk,输出端div3,再加一个复位端(这里不加也可)所以输入 clk,rst输出 clk_out再考虑状态转换的问题。4分频占空比0.25,可以为0100或1000都行。在时钟的作用下,应该不停的在这四种状态下转换,并且输出仅仅依赖于当前的状态,所有的整数分频器都可以按照次方法来实现。`timescale 1ns/1nsmodul原创 2022-04-12 16:17:46 · 1120 阅读 · 0 评论 -
时钟 切换
时钟 切换题目描述存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频,现在要设计一个切换电路,sel选择时候进行切换,要求没有毛刺。信号示意图题目解读通过在每个时钟源的选择路径中插入一个负边沿触发的D触发器,可以确保时钟在高电平时,输出保持不变。 通过这种反馈的方式使得在时钟切换时需要等待当前时钟取消选择,从而避免毛刺的产生。该电路中有三个时序路径需要特别考虑:sel控制信号到两个负边沿触发触发器任意一个,DFF0的输出到DFF1的输入,DFF1输出的DFF0输入。 如原创 2022-04-12 16:13:21 · 504 阅读 · 0 评论 -
并串 转换
并串 转换题目描述设计一个模块进行并串转换,要求每四位d输为转到一位dout输出,输出valid_in表示此时的输入有效输入描述:clk为时钟rst为低电平复位d 信号输入输出描述:dout 信号输出valid_in 表示输入有效题目解读串并转换操作是非常灵活的操作,核心思想就是移位。串转并就是把1位的输入放到N位reg的最低位,然后N位reg左移一位,在把1位输入放到左移后的reg的最低位,这样循环,就可以得到,以最高位开始传输,最低位传输完成的N位数据了;并转串就是把并行的N原创 2022-04-11 18:53:59 · 3277 阅读 · 0 评论 -
使用握手信号实现跨时钟域数据传输
使用握手信号实现跨时钟域数据传输题目描述分别编写一个数据发送模块和一个数据接收模块,模块的时钟信号分别为clk_a,clk_b。两个时钟的频率不相同。数据发送模块循环发送0-7,在每个数据传输完成之后,间隔5个时钟,发送下一个数据。请在两个模块之间添加必要的握手信号,保证数据传输不丢失。模块的接口信号图如下:data_req和data_ack的作用说明:data_req表示数据请求接受信号。当data_out发出时,该信号拉高,在确认数据被成功接收之前,保持为高,期间data应该保持不变,等待接原创 2022-04-11 09:46:43 · 1271 阅读 · 0 评论 -
根据RTL图编写Verilog程序
根据RTL图编写Verilog程序题目描述根据以下RTL图,使用 Verilog HDL语言编写代码,实现相同的功能,并编写testbench验证功能。`timescale 1ns/1nsmodule RTL( input clk, input rst_n, input data_in, output reg data_out ); reg data_in_reg; always@(posedge clk or negedge rst_n)原创 2022-04-10 15:33:16 · 2585 阅读 · 0 评论 -
简易交通灯
简易交通灯题目描述要求实现一个交通红绿灯,具有红黄绿三个小指示灯和一个行人按钮,正常情况下,机动车道指示灯按照60时钟周期绿灯,5个时钟周期黄灯,10个时钟周期红灯循环。当行人按钮按下,如果剩余绿灯时间大于10个时钟,则缩短为10个时钟,小于10个时钟则保持不变。注:机动车道的指示灯和人行道指示灯应该是配对的,当机动车道的灯为绿或者黄时,人行道的灯为红;当机动车道的灯为红时,人行道的灯为绿,为简便起见,只考虑机动车道的指示灯。模块的信号接口图如下:`timescale 1ns/1nsmodu原创 2022-04-10 15:16:37 · 328 阅读 · 0 评论 -
流水线乘法器
流水线乘法器题目描述实现4bit无符号数流水线乘法器设计。电路的接口如下图所示。将乘法分解为若干个加法。`timescale 1ns/1nsmodule multi_pipe#( parameter size = 4)( input clk , input rst_n , input [size-1:0] mul_a , input [size-1:0] mul_b , output reg [size*2-1:0] m原创 2022-04-10 15:08:36 · 1647 阅读 · 0 评论 -
Johnson Counter
Johnson Counter题目描述请用Verilog实现4位约翰逊计数器(扭环形计数器),计数器的循环状态如下。电路的接口如下图所示。`timescale 1ns/1nsmodule JC_counter( input clk , input rst_n, output reg [3:0] Q ); always @(posedge clk or negedge rst_n)beg原创 2022-04-10 15:00:01 · 830 阅读 · 0 评论 -
RAM的简单实现
RAM的简单实现题目描述实现一个深度为8,位宽为4bit的双端口RAM,数据全部初始化为0000。具有两组端口,分别用于读数据和写数据,读写操作可以同时进行。当读数据指示信号read_en有效时,通过读地址信号read_addr读取相应位置的数据read_data,并输出;当写数据指示信号write_en有效时,通过写地址信号write_addr 和写数据write-data,向对应位置写入相应的数据。程序的信号接口图如下`timescale 1ns/1nsmodule ram_mod( in原创 2022-04-10 14:50:55 · 1018 阅读 · 0 评论 -
单端口RAM
单端口RAM题目描述设计一个单端口RAM,它有: 写接口,读接口,地址接口,时钟接口和复位;存储宽度是4位,深度128。注意rst为低电平复位信号示意图:单口RAM的实现原理建立一个reg的数组,将数据存储进来,进行的是读、写互不干扰的读写机制,即要么读要么写。这个时侯需要设置enb,进行读写的开关控制。需要注意的是,写是对寄存器进行写,因此必须有时序电路构成。`timescale 1ns/1nsmodule RAM_1port( input clk, input rst原创 2022-04-10 14:23:26 · 1246 阅读 · 0 评论 -
加减计数器
加减计数器题目描述请编写一个十进制计数器模块,当mode信号为1,计数器输出信号递增,当mode信号为0,计数器输出信号递减。每次到达0,给出指示信号zero。模块的接口信号图如下:`timescale 1ns/1nsmodule count_module( input clk, input rst_n, input mode, output reg [3:0]number, output reg zero ); reg[3:0] num; always@(pos原创 2022-04-10 12:49:00 · 684 阅读 · 0 评论 -
脉冲同步电路
脉冲同步电路题目解析从A时钟域提取一个单时钟周期宽度脉冲,然后在新的时钟域B建立另一个单时钟宽度的脉冲。A时钟域的频率是B时钟域的10倍;A时钟域脉冲之间的间隔很大,无需考虑脉冲间隔太小的问题。电路的接口如下图所示。data_in是脉冲输入信号,data_out是新的脉冲信号;clk_fast是A时钟域时钟信号,clk_slow是B时钟域时钟信号;rst_n是异步复位信号。题目解析上图中最左端的数据选择器和寄存器,组成了快时钟域下的翻转电路;中间的两个寄存器是两级同步器;最后一个寄存器和异或原创 2022-04-10 11:16:14 · 930 阅读 · 0 评论 -
多bit MUX同步器
多bit MUX同步器题目描述在data_en为高期间,data_in将保持不变,data_en为高至少保持3个B时钟周期。表明,当data_en为高时,可将数据进行同步。本题中data_in端数据变化频率很低,相邻两个数据间的变化,至少间隔10个B时钟周期。电路的接口如下图所示。端口说明如下表所示。题目解析(1)对单比特的数据有效标志信号在clk_b时钟域打两拍(2)将同步后的数据有效标志信号作为多路选择器的选通信号,由于data_en的时序等同于 data_in,也就保证了data_原创 2022-04-10 10:45:45 · 1071 阅读 · 0 评论 -
同步FIFO
同步FIFO题目描述根据题目提供的双口RAM代码和接口描述,实现同步FIFO,要求FIFO位宽和深度参数化可配置。电路的接口如下图所示。题目解析设计FIFO的时候一般需要考虑的有两点:FIFO的大小 FIFO的大小指就是双端口ram的大小,这个可以根据设计需要来设置。FIFO空满状态的判断 FIFO空满状态的判断通常有两种方法。a、FIFO中的ram一般是双端口ram,所以有独立的读写地址。因此可以一种是设置读,写指针,写指针指向下一个要写入数据的地址,读指针指向下一个要读原创 2022-04-07 18:55:39 · 264 阅读 · 0 评论 -
异步FIFO
异步FIFO题目描述请根据题目中给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。电路的接口如下图所示。题目解析异步FIFO结构如上图所示第1部分是双口RAM,用于数据的存储。第2部分是数据写入控制器第3部分是数据读取控制器读指针同步器使用写时钟的两级触发器采集读指针,输出到数据写入控制器。写指针同步器使用读时钟的两级触发器采集写指针,输出到数据读取控制器。本题解采用的空满判断的方式是用格雷码的比较来产生空满信号。原创 2022-04-07 18:19:07 · 180 阅读 · 0 评论 -
使用generate...for语句简化代码
使用generate…for语句简化代码题目描述在某个module中包含了很多相似的连续赋值语句,请使用generate…for语句编写代码,替代该语句,要求不能改变原module的功能。module template_module( input [7:0] data_in, output [7:0] data_out); assign data_out [0] = data_in [7]; assign data_out [1] = data_in [6];原创 2022-03-18 11:19:19 · 599 阅读 · 0 评论 -
突发传输模式
突发传输模式突发传输(Burst transmission),一般也称为数据突发,其在通信领域中一般指在短时间内进行相对高带宽的数据传输。突发传输一般表示的是两个设备之间进行数据传送的一种模式,也可将其称为突发模式下的数据传输。而突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(Burst Lengths,简称BL)。在突发传输模式下,多个数据单元当做一个单元(相当一个数据块)来传送,从而提高了传输效率。突发方式将整个信道专用于传送一个源节点的数据。具有原创 2022-03-17 10:26:15 · 9893 阅读 · 1 评论