
FPGA基础
FPGA基础类型
傻童:CPU
业精于勤,荒于嬉;行成于思,毁于随。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
vivado常用的tcl命令
tcl原创 2023-10-07 22:24:24 · 416 阅读 · 0 评论 -
TimeGen的使用
TimeGen的入门使用。原创 2022-08-30 20:09:38 · 1171 阅读 · 0 评论 -
角度和弧度的相互换算
角秒,又称弧秒,是量度角度的单位,即角分的六十分之一,符号为"。在不会引起混淆时,可简称作秒。“角秒”二字只限用于描述角度,不能于其他以“秒”作单位的情况使用(如时间)。既可以使用角度来测量角,也可以使用弧度来测量角。平时有°的单位为角度,没有单位表示的弧度。得出周角之比等于弧长之比。弧度与角度的相互换算。...原创 2022-08-09 09:35:02 · 4457 阅读 · 0 评论 -
关键路径的分析
组合逻辑的延时过长,就会成为关键路径,这时可以考虑在该路径上插入额外的寄存器,这种方法也称为插入流水线,多用于高度流水的设计中,因为这种设计中额外插入寄存器增加的时钟周期延时并不会违反整个设计的规范要求,从而不会影响设计的总体功能性实现,也即额外插入的寄存器在保持吞吐量不变的情况下改善了设计的时序性能。当某个信号的扇出fanout比较大时,会造成该信号到各个目的逻辑节点的路径变得过长,从而成为设计中的关键路径,此时可以通过对该信号进行复制来降低扇出。case,是的顺序执行的语句编程并行执行。...原创 2022-07-28 18:50:43 · 1612 阅读 · 0 评论 -
基于Xilinx的时序分析与约束
时序分析主要有两种办法静态时序分析(statictiminganalysis,STA),是遍历电路存在的所有时序路径,根据给定工作条件(PVT)下的时序库.lib文件计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足约束要求,根据最大路径延时和最小路径延时找出违背时序约束的错误。动态时序分析了解了时序分析后,其实时序约束也就好理解了。简单来讲,时序约束就是你要告诉综合工具,你的标准是什么。综合工具应该如何根据你的标准来布线,以满足所以寄存器的时序要求。......原创 2022-07-27 14:43:37 · 400 阅读 · 0 评论 -
芯片的功耗
众所周知,在数字IC设计中,时钟信号的翻转率是比较高的,因此它的功耗约占整个芯片功耗的20-30%。传统的设计方法是时钟信号一直是存活着的(常开),门控时钟技术就是根据设计,将暂时不用的模块的时钟信号通过一个控制信号gating住,降低这个模块的时钟信号翻转率,从而降低芯片功耗的一种技术。开关功耗为电路翻转时对负载电容充电的功耗,短路功耗为输入翻转时,PMOS和NMOS同时打开的瞬间电流形成的功耗。从公式中可以看到降低动态功耗的思路,可以从Vdd、F、CL和降低gate翻转次数等方面来设计降低功耗的方案。.原创 2022-07-24 11:38:01 · 8022 阅读 · 0 评论 -
线性反馈移位寄存器(LSFR)
理论表明,要使LFSR得到最长的周期,这个抽头序列构成的多项式加1就是其反馈多项式,必须是一个本原多项式,也就是说这个多项式不可约,比方下图的抽头序列为,其对应的反馈多项式为,其对应的线性反馈移位寄存器电路如下所示。其中,gn为反馈系数,取值只能为0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路;这里的反馈系数决定了产生随机数的算法的不同。反馈函数为线性的叫线性移位反馈序列,否则叫非线性反馈移位序列。其主要应用在伪随机数,伪噪声序列,计数器,BIST,数据的加密和CRC校验等。...原创 2022-07-22 19:46:34 · 11005 阅读 · 0 评论 -
FPGA出错的积累
语法出错!(多写或者少写)原创 2022-07-22 12:04:34 · 607 阅读 · 0 评论 -
AMBA APB介绍
APB是AMBA总线体系中的一部分并且优化了最小功率消耗和降低了接口复杂度。AMBA APB表现为一个局部二级总线,封装为AHB或者ASB的一个外设。APB在AHB和ASB信号的基础上直接为系统总线提高了低功耗的延伸。APB桥作为一个从模块处理总线握手并且从局部外设总线的角度控制信号的时序更新。通过从系统总线起始点定义APB接口,可以有效的利用系统诊断和测试方法的好处。AMBA APB应该被用作任何低带宽和不需要通过总线接口的高性能的外设接口。最新版本的APB规定所有信号的传输只和时钟的上升沿相关。原创 2022-07-12 17:56:12 · 798 阅读 · 0 评论 -
AMBA AHB介绍
AHB是为提出高性能可综合设计的要求而产生的新一代AMBA总线。它是一种支持多总线主机和提供高带宽操作的高性能总线。AMBA AHB实现了高性能,高时钟频率系统的以下特征要求:这条高级总线和当今的APB能够有效的桥接确保了能够方便集成任何现有的设计。AMBA AHB的设计可能包含一个或者多个主机,一个典型的系统将至少包含处理器和测试接口。然而,将直接数据存取(DMA)或者数字信号处理器(DSP)包含作总线主机也很普通。外部储存器接口,APB桥和任何内部储存器是最常见的AHB从机。然而,低带宽的外设通常都是原创 2022-07-12 17:42:30 · 1358 阅读 · 0 评论 -
AMBA总线介绍
系统芯片中各个模块之间需要要有接口来连接总线作为子系统之间共享的通信链路优点:低成本,方便易用缺点:会造成性能颈瓶AMBA:Advanced Microcontroller Bus Architecture。片总线的标准定义了三种总线:AHB(Advanced High-performance Bus)、ASB(Advanced System Bus),APB(Advanced Peripheral Bus)处理器和其他主设备/从设备都是可以替换的基于AMBA的微控制器典型地由一个高性能系统中枢总原创 2022-07-12 10:28:57 · 1943 阅读 · 0 评论 -
建立时间和保持时间的模型分析
起点是源触发器D1的采样时刻,终点是目的触发器D2的采样时刻,假设起点已经满足了建立时间和保持时间要求,现在分析终点采样时刻是否同样满足要求。其中触发器的行为:时钟沿到来时采样数据D,将采到的数据寄存下来,并输出到Q端,所有如果没有新的时钟沿到来,则Q端输出的一直是上次采样的数据,每来一个时钟沿,采样一次数据D。假设clk传输没有延时:则每一个时钟上升沿都会同时到达D1和D2。时间起点,第一个时钟沿D1的采样时刻,时间终点,第二个时钟沿D2的采样时刻。物理起点,D1的输入端,物理终点,D2的输入端。建立原创 2022-07-05 10:46:50 · 277 阅读 · 0 评论 -
以太网通信协议
以太网数据格式原创 2022-06-15 18:44:50 · 677 阅读 · 0 评论 -
以太网UDP帧发包设计
RTL8211 是一片 10M/100M/1000M 自适应以太网收发器,提供 MII/GMII/RGMII 接口的MAC 连接。下图为 RTL8211 与 FPGA 的连接关系。以太网MAC层(媒体介入控制层)接口介绍PHY是物理接口收发器,它实现物理层。包括MII/GMII(介质独立接口)子层、PCS(物理编码子层)、PMA(物理介质附加)子层、PMD(物理介质相关)子层、MDI子层。MAC 侧向 PHY 侧传输数据的时序图如下。发送数据信号 TXD 和发送使能信号需要在时钟上升沿保持稳定原创 2022-06-14 14:24:45 · 2826 阅读 · 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 · 1339 阅读 · 0 评论 -
I2C接口
I2C总线是一种简单的方法来连接多个芯片,特别是fpga / cpld。I2C总线的特点但它是如何工作的一个I2C总线至少需要一个I2C主总线和一个I2C从总线。I2C主服务器是一个事务启动器(主服务器可以向从服务器写或从服务器读)。I2C从站是一个事务接收端(从站可以向主站写入或从主站读取)。I2C波形这是它在公共汽车上的样子。这是对地址为0x51的EEPROM的写操作,包含2个数据字节0x50和0x0F。一个I2C事务以一个“开始”条件开始,后面是我们想要与之通信的设备地址,一个比特表示我们原创 2022-06-12 17:09:51 · 2184 阅读 · 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 · 972 阅读 · 0 评论 -
FPGA时序分析和约束实例
FPGA时序分析和约束实例原创 2022-05-12 11:31:53 · 362 阅读 · 0 评论 -
设计FIFO深度
设计FIFO深度假设FIFO的写时钟为100MHZ,读时钟为80MHZ。在FIFO输入侧写数据侧,每100个时钟,写入80个数据,FIFO读出侧每个时钟读出一个数据。设计合理的FIFO深度,使FIFO不会溢出。如果读出侧每3个时钟读出1个数据,请问FIFO深度又是多少?高电平代表写,低电平代表没有写瞬时带宽最大:背靠背的时钟周期时,数据压力最大。此处就是前100时钟周期的后80个时钟周期写,后100个时钟周期的前80个时钟周期写。令写和读都是同时启动,写完160个数据时刻,FIFO中剩余x个数据原创 2022-05-04 17:53:46 · 1542 阅读 · 2 评论 -
简单使用Modelsim跑个仿真
简单使用Modelsim跑个仿真第一步:打开Modelsim第二步:点击File->New->Project(注意等待加载完了再去操作)第三步:输入工程名称->选择工程文件->ok第四步:添加激励文件和设计文件第五步:选中->编译第六步:进入work点击第七步:添加波形第八步:跑仿真附加信息Subline Text可以自动生生仿真模型右击->选择insert header...原创 2022-04-12 19:35:44 · 875 阅读 · 0 评论 -
任意奇数倍时钟分频
任意奇数倍时钟分频题目描述编写一个模块,对输入的时钟信号clk_in,实现任意奇数分频,要求分频之后的时钟信号占空比为50%。模块应包含一个参数,用于指定分频的倍数。模块的接口信号图如下:题目解读题目要求实现任意奇数倍数的分频,实现分频的基本方法是采用计数器,使用输入时钟信号驱动计数器。例如实现偶数倍的n分频时,每当计数器从0计数到n/2 - 1时,输出时钟信号跳变,同时计数器归零从新开始计数。题目要求的是奇数倍分频,且要求占空比为50%,则需要稍加调整:以五分频为例,需要输出时钟信号保持2.原创 2022-04-12 18:34:15 · 615 阅读 · 0 评论 -
求最小公倍数
求最小公倍数题目描述设计一个时序电路,输入2个无符号数,位宽可以通过参数DATA_W确定,输出这两个数的最小公倍数和最大公约数。模块的接口信号图如下:题目解读题目要求求解两个数的最小公倍数,而最小公倍数可以通过两个数的乘积除以两个数的最小公约数得到。乘法是容易计算的,所以问题变成如何求解最大公约数。可以采用辗转相减法求解,例如 :两个自然数35和14,用大数减去小数,(35,14)->(21,14)->(7,14),此时,7小于14,要做一次交换,把14作为被减数,即(14,7)-&原创 2022-04-12 18:25:51 · 2385 阅读 · 0 评论 -
异步复位同步释放
异步复位同步释放题目描述请使用异步复位同步释放来将输入数据a存储到寄存器中,并画图说明异步复位同步释放的机制原理信号示意图题目解读复位可以在任何时候发生,表面上看跟时钟没有关系,但真实情况是异步复位也需考虑时钟跳变沿,因为时钟沿变化和异步复位都可以引起Q端数据变化。同步复位虽然解决了当时钟的有效沿来临的时候rst的边沿也正好来临所出现的冒险与竞争。但是从综合的电路上可以看出,多了一个组合逻辑MUX。如果设计中所有的复位都是这样的,那会增加很多的资源,导致芯片面积很大,而异步复位同步释放机制可以解原创 2022-04-12 18:17:31 · 392 阅读 · 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 · 4440 阅读 · 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 · 399 阅读 · 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 · 610 阅读 · 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 · 1059 阅读 · 0 评论 -
状态机与时钟分频
状态机与时钟分频题目描述使用状态机实现时钟分频,要求对时钟进行四分频,占空比为0.25信号示意图题目解读首先考虑输入输出,作为分频电路,有一个时钟输入端,clk,输出端div3,再加一个复位端(这里不加也可)所以输入 clk,rst输出 clk_out再考虑状态转换的问题。4分频占空比0.25,可以为0100或1000都行。在时钟的作用下,应该不停的在这四种状态下转换,并且输出仅仅依赖于当前的状态,所有的整数分频器都可以按照次方法来实现。`timescale 1ns/1nsmodul原创 2022-04-12 16:17:46 · 1264 阅读 · 0 评论 -
时钟 切换
时钟 切换题目描述存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频,现在要设计一个切换电路,sel选择时候进行切换,要求没有毛刺。信号示意图题目解读通过在每个时钟源的选择路径中插入一个负边沿触发的D触发器,可以确保时钟在高电平时,输出保持不变。 通过这种反馈的方式使得在时钟切换时需要等待当前时钟取消选择,从而避免毛刺的产生。该电路中有三个时序路径需要特别考虑:sel控制信号到两个负边沿触发触发器任意一个,DFF0的输出到DFF1的输入,DFF1输出的DFF0输入。 如原创 2022-04-12 16:13:21 · 592 阅读 · 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 · 3408 阅读 · 0 评论 -
使用握手信号实现跨时钟域数据传输
使用握手信号实现跨时钟域数据传输题目描述分别编写一个数据发送模块和一个数据接收模块,模块的时钟信号分别为clk_a,clk_b。两个时钟的频率不相同。数据发送模块循环发送0-7,在每个数据传输完成之后,间隔5个时钟,发送下一个数据。请在两个模块之间添加必要的握手信号,保证数据传输不丢失。模块的接口信号图如下:data_req和data_ack的作用说明:data_req表示数据请求接受信号。当data_out发出时,该信号拉高,在确认数据被成功接收之前,保持为高,期间data应该保持不变,等待接原创 2022-04-11 09:46:43 · 1412 阅读 · 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 · 2860 阅读 · 0 评论 -
简易交通灯
简易交通灯题目描述要求实现一个交通红绿灯,具有红黄绿三个小指示灯和一个行人按钮,正常情况下,机动车道指示灯按照60时钟周期绿灯,5个时钟周期黄灯,10个时钟周期红灯循环。当行人按钮按下,如果剩余绿灯时间大于10个时钟,则缩短为10个时钟,小于10个时钟则保持不变。注:机动车道的指示灯和人行道指示灯应该是配对的,当机动车道的灯为绿或者黄时,人行道的灯为红;当机动车道的灯为红时,人行道的灯为绿,为简便起见,只考虑机动车道的指示灯。模块的信号接口图如下:`timescale 1ns/1nsmodu原创 2022-04-10 15:16:37 · 415 阅读 · 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 · 1846 阅读 · 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 · 938 阅读 · 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 · 1154 阅读 · 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 · 1361 阅读 · 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 · 770 阅读 · 0 评论 -
可置位计数器
可置位计数器题目描述请编写一个十六进制计数器模块,计数器输出信号递增每次到达0,给出指示信号zero,当置位信号set 有效时,将当前输出置为输入的数值set_num。模块的接口信号图如下:`timescale 1ns/1nsmodule count_module( input clk, input rst_n, input set, input [3:0] set_num, output reg [3:0]number, output reg zero ); reg [原创 2022-04-10 12:30:20 · 425 阅读 · 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 · 1038 阅读 · 0 评论