自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 在vivado中使用tcl脚本(UG894)

本文源自UG894,主要介绍如何在vivado中使用tcl脚本1.vivado中如何获取tcl helpvivado中任何自带的命令都可以通过“-help”获取帮助信息。也可以直接输入“help”取得vivado命令合集,并通过“help -category (tools)”来获取某类操作的所有命令简介。2.工程模式下编译和报告示例脚本该过程可以通过运行GUI vivado自动产生的记录文件vivado.jou查看,该文件中记录了自打开vivado后运行的所有命令。1.通过create_proj

2022-02-05 22:05:47 11597 1

原创 Tcl脚本学习

包的创建和调用在tcl脚本中,我们可以通过创建和调用包来增强代码的可复用性。创建包的步骤:1.在包脚本文件中,首先声明“package provide”,标识当前文件提供了一个包。之后在该文件中完成包的内容2.通过pkg_mkIndex命令创建pkgIndex.tcl文件,在包所在路径中声明所包含包的名字和版本。3.通过在auto_path 变量增加包路径,告诉tcl编译器哪里可以找到包。调用包的步骤:1.通过package require声明当前脚本需要哪些包。类似于c语言调用头文件。#

2022-01-31 15:14:18 1241

原创 verilog除法器设计

除法器原理和十进制除法类似,计算 27 除以 5 的过程如下所示:除法运算过程如下:(1) 取被除数的高几位数据,位宽和除数相同(实例中是 3bit 数据)。(2) 将被除数高位数据与除数作比较,如果前者不小于后者,则可得到对应位的商为 1,两者做差得到第一步的余数;否则得到对应的商为 0,将前者直接作为余数。(3) 将上一步中的余数与被除数剩余最高位 1bit 数据拼接成新的数据,然后再和除数做比较。可以得到新的商和余数。(4) 重复过程 (3),直到被除数最低位数据也参与计算。需要说明的

2021-11-24 22:02:56 2104 2

原创 C语言常用简单语法总结

1.数组1.一维数组一位数组的定义://定义长度为10,即a[0] - a[9],内容格式为int的数组int array[10]; 二位数组的定义://定义3行4列,内容格式为int的二维数组int array[3][4];2.函数与函数的调用2.1子函数的定义类型名 函数名(){ 函数体}以下为两个子函数定义的例子。//定义一个返回值为int类型,函数名为max1,参数为int类型的a和b的子函数int max1(int a, int b){ if(a >

2021-11-02 21:27:11 1036

原创 FPGA复位

1.同步复位always@(posedge clk) begin if(!rstn) q <= 1'b0; else q <= d;end优点:1.保证电路100%复位。2.只在时钟边沿检测,可过滤一些毛刺;对于一些复位由组合逻辑产生的电路,建议使用同步复位。缺点:1.对于一些没有同步复位接口的寄存器,同步复位信号会与数据信号相与之后接入触发器d端口,导致数据流逻辑不纯净,在一些时序较紧的设计中可能会导致时序违例。2.如果ASIC/FPGA具有内部三态总线,则导致复位

2021-07-17 16:38:48 246

原创 vivado时序分析

vivado时序分析1.Tsu问题常见原因及解决方法1.1 组合逻辑过于庞大复杂组合逻辑过大时会增加信号的到达时间。解决方式:1.如果设计允许,可以添加多周期路径。2.添加流水线寄存器,切分组合逻辑,降低延迟。3.优化组合逻辑,减小时延。1.2 扇出过大降低扇出最好不要在综合设置中指定,过低的扇出限制会造成设计堵塞反而不利于时序收敛,最好的方法是根据设计中时序最差路径的扇出进行针对性的优化。解决方式:1.寄存器复制通过复制几个相同的寄存器来分担由原先一个寄存器驱动所有模块的任务,继

2021-07-15 11:22:39 3854

原创 vivado时序约束

1.时钟周期约束基础时钟周期为10ns的基础时钟create_clock -period 10 [get_ports sys_clk]生成时钟生成时钟为通过组合逻辑自己生成的时钟驱动。(MMCM、PLL、BUFR输出的时钟不是生成时钟,vivado会自动识别,不需要额外约束)。如图是经典二分频生成时钟,其输出的时钟约束应当为:create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2 [get_pi

2021-07-01 22:19:31 9019

原创 单bit控制信号的跨时钟域传输

1.慢时钟到快时钟这种方法通常应用在慢速向快速时钟传递过程中,可以检测输入信号的上升沿,也可以检测它的下降沿。顾名思义,该电路主要由两个部分构成:同步电路和边沿采样电路。首先使用快时钟对数据进行两级采样同步,之后对得到的长信号进行边沿检测,得到长为一个快时钟周期的高电平信号。代码如下:module slow2fast_EdgeDetect( input wire clk_slow, input wire clk_fast, input wire .

2021-04-16 16:38:58 3275 1

原创 FPGA时钟与时钟域

1.时钟信号的分类1.1 外部时钟外部时钟,即时钟来自FPGA外部。通常外部时钟源对FPGA设计来说是必须的,因为一般FPGA芯片内部没有能够产生时钟信号的选频和激励电路。因此,通常FPGA芯片都需要外部晶振以及电阻、电容、电感、三极管等器件,用于搭建产生时钟信号的电路。另外,当用示波器观察外部时钟信号时,会发现波形是一个正弦波,不过模拟的时钟信号经逻辑门的驱动后,由于MOS电路的陡峭导通特性,会对时钟信号的边沿起到积极的缩减作用。1.2 内部时钟再生时钟:FPGA芯片内部通过输入时钟信号作为参考

2021-04-15 11:01:39 4550

原创 在always@(*)内,由<=和=赋值混用造成的问题

在alwaya@(*)中,最好全部用<=或=赋值,若两者混用,则会导致Iteration limit或fatal run time error等问题。

2021-03-23 11:57:55 1111

原创 verilog模块参数传递

底层模块编写:module moudleName #(parameter p1 = 8, parameter p2 = 4)( input wire [p1-1:0] a, input wire [p1-1:0] b, output wire [p2:0] c );endmodule例化:moudleName#( .p1 ( 2 ) .p2 ( 2 ))u_moudleName( .a (

2021-03-04 20:36:07 1426 1

原创 vivado如何添加xci文件

add source ->add files ->找到.xci文件直接添加即可。

2021-03-04 20:24:54 2534 1

原创 亚稳态学习小结

亚稳态学习小结一、亚稳态是什么要知道亚稳态的定义,首先要知道时钟上升沿采样中的建立时间(setup time)和保持时间(hold time)。1.1 建立时间(Tsu)、保持时间(Th)建立时间:在触发器时钟上升沿到来之前,数据需要保持稳定不变的时间。如果建立时间不够,数据就不能在此上升沿被稳定打入触发器。保持时间:在触发器时钟上升沿到来后,数据需要保持稳定不变的时间。如果保持时间不够,数据同样不能被稳定打入触发器。1.2 亚稳态在数据打入触发器时,若不满足建立时间或保持时间,触发器就会进

2021-01-22 10:48:03 447 3

原创 异步fifo设计

文章参考Simulation and Synthesis Techniques for Asynchronous FIFO Design一、简介异步FIFO主要用于跨时钟域数据的传输,一些异步FIFO的错误设计也能实现90%的功能,错误较少的设计在99%的时间内也能正常工作,本文指明了一些异步FIFO设计中不能忽视的细节。二、传输异步信号FIFO设计的主要难点在于产生FIFO指针和可靠的标志FIFO空满的方法。2.1 同步FIFO指针在同步FIFO设计中,可以用计数器来标志FIFO的空满。同步F

2020-12-04 10:17:17 1608 2

原创 verilog代码风格及FPGA设计思路

有限状态机状态机状态不能太多,能合并的状态合并,减小电路综合难度。能不用状态机最好不用,用底层电路实现。状态机可以不用理解底层电路是什么,用综合工具实现即可。摩尔型状态机(输出只与状态有关)比米利型状态机(输出与状态和输入有关)运行速度更快,因为不用考虑输入逻辑的延迟。testbench$:打印 用的不多,比较浪费cpu资源,效率很低;只是关键信号的关键时刻可以打印;通常用于长时间大型仿真中,提取关键状态信号,以确保得知仿真在正常运行。仿真文件层次越少越好。仿真速度过慢时,可以酌情选择合适

2020-11-23 16:25:42 555

原创 交换机转发过程及帧mac地址的变化

二层交换机:没有mac地址交换时,不改变帧的源地址和目的地址直接根据查找表的目的地址及端口将帧发送即可路由器(或带有路由功能的交换机):转发端口有mac地址交换时,ip源目的地址不变,mac源目的地址变化。在帧不断转发的过程中,ip源目的地址不变,mac源目的地址根据所经过的路由器端口变化。...

2020-11-16 20:29:55 3587

原创 CAM(Content-Addressable Memory)介绍

https://etherealmind.com/basics-what-is-content-addressable-memory-cam/https://etherealmind.com/basics-what-is-binary-cam-bcam/https://etherealmind.com/basics-what-is-ternary-content-address-memory-tcam/http://movingpackets.net/2016/07/06/response-cam-t

2020-10-19 21:45:48 9790

原创 viviado仿真问题及解决

vivado自带仿真完成后,关闭重启后出现z。解决:将端口从仿真窗口删除后重新添加。

2020-09-12 12:16:18 1446

原创 task和function说明语句

function只能返回一个数值,并且需要至少一个输入。类似于定义一个计算公式。task相对功能丰富,可以有任意多个输入输出,并且可以使用延时、事件和时序控制结构,也可在任务中调用其他的任务和函数。类似于c中的子函数。一下详细解释摘自《Verilog数字系统设计教程-夏宇闻》task和function的不同点task说明语句function说明语句函数的目的是返回一个用于表达式的值。小结...

2020-09-05 21:46:28 702

原创 FPGA的基本结构

FPGA主要由以下几部分组成:(1)基本可编程逻辑单元(CLB)(2)可编程输入输出单元(IOB)(3)嵌入式块RAM(4)内嵌的底层功能单元和嵌入式专用硬核(5)完整的时钟管理模块(6)丰富的布线资源一、总体结构二、基本组成部分1、可配置逻辑单元(Configurable Logic Block,CLB)CLB由两个SLICE构成,SLICE可分为SLICEL(L:Logic)和SLICEM(M:Memory),因此CLB也可分为CLBLL和CLBLM两类。SLICE由查找表(L

2020-09-04 10:45:40 8245 1

空空如也

空空如也

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

TA关注的人

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