
FPGA
文章平均质量分 73
FPGA学习
暴风雨中的白杨
好好工作,不要摸鱼!
展开
-
试商法除法器
过程类似于十进制除法。对于32位的除法,至少需要32个时钟周期,才能得到除法的结果。取出被除数的最高位m[k], 使用被除数的最高位减去除数n ,如果结果大于等于0, 则商的s[k] 为1,反之为0如果上一步得到的结果为0,表示当前被减数小于除数,则取出被除数剩下的值的最高位m[k-1],与当前被减数组合作为下一轮被减数。如果上一轮得到的结果是1,表示当前被减数大于除数,则利用上一轮中减法的结果与被除数剩下的值的最高位m[k-1]组合作为下一轮的被减数。然后,设置k等于k-1。原创 2024-09-09 23:03:09 · 857 阅读 · 0 评论 -
TCL管理Vivado工程
no_ip_version选项用于去除IP的版本信息,方便工程在高版本vivado中打开的情况。这里采用将原工程中ip的xci文件直接拷贝到ip目录中的方式。将原工程的源文件、仿真文文件、约束文件拷贝到src目录下。如果工程有bd文件,生成对应的tcl脚本用于恢复工程。通过TCL Console 将目录切换到tcl目录。如果有多个bd文件,需要依次打开然后执行上述指令。( 需要打开对应的bd文件,不打开会找不到)在TCL Console执行。生成新建工程tcl脚本。添加仿真文件和约束文件。原创 2024-03-18 04:38:08 · 1853 阅读 · 0 评论 -
Verilog wait语句
遇到wait语句时,会判断wait语句条件是否成立。Verilog的wait语句是阻塞语句。原创 2024-01-12 17:35:52 · 2189 阅读 · 0 评论 -
SystemVerilog:always_ff,always_comb,always_latch
Verilog中只有一个通用的always过程块,SystemVerilog中追加了3个具有更明确目的专用always块。always_ffalways_ff, always_comb, always_latch分别是用于寄存器(flip-flop,代表时序逻辑sequential logic), 组合逻辑以及锁存器的建模。事实上,always_ff, always_comb, always_latch能实现的,always都能够实现。原创 2023-12-27 23:40:57 · 1361 阅读 · 0 评论 -
Verilog系统任务$random
random 是Verilog提供的一个随机数生成系统任务,调用该任务后,将会返回一个32bit的integer类型的有符号的值。原创 2023-12-26 16:30:41 · 1149 阅读 · 0 评论 -
Verilog RAM/ROM的数据初始化
FPGA设计中RAM和ROM作为存储器用来存储可变或不可变类型的数据。ROM初始化一般是加载固定数据,RAM声明时默认为不定态数据,初始化时可以让数据为全1或者全0。原创 2023-12-23 23:49:01 · 4985 阅读 · 0 评论 -
Verilog 字符串
一个字符串是由双引号"括起来并包含在一行中的字符序列。在表达式和赋值语句中,用作操作数的字符串被视为由8bit ASCII码值表示的无符号整数常量。原创 2023-12-19 20:26:07 · 2205 阅读 · 0 评论 -
Verilog if语句阻断z状态传播
设置两组输入输出,对比使用assign赋值语句与always if语句。原创 2023-12-05 21:11:54 · 628 阅读 · 0 评论 -
Verilog 函数和任务
在Verilog代码中,通过把代码分成小的模块或者使用任务(task)和函数(function),可把一项任务分成许多较小的、易于管理的部分,从而提高代码的可读性、可维护性和可重用性。函数和任务往往还是大的程序模块在不同地点多次用到的相同的程序段。函数(function):一般用于计算,或者用来代替组合逻辑。不能包含任何延迟;函数在零时间执行。函数只有input变量,虽然没有output变量,但可以通过函数名返回一个值。可以调用其他的函数,但不可以调用任务。原创 2023-10-29 21:57:26 · 2007 阅读 · 0 评论 -
Verilog Testbench获取时钟沿
Verilog Testbench获取时钟沿。原创 2023-10-26 11:38:49 · 218 阅读 · 0 评论 -
Verilog编译预处理
编译预处理是Verilog HDL编译系统的一个组成部分。Verilog HDL编译系统通常先对这些特殊的命令进行预处理,然后将预处理的结果和源程序一起在进行通常的编译处理。为了和一般的语句相区别,这些预处理命令以符号 ` 开头这些预处理命令的有效作用范围为定义命令之后到本文件结束或到其它命令定义替代该命令之处。一般形式// 宏定义`define 宏名 宏内容// 使用宏`宏名宏名的有效范围为定义命令之后到原文件结束。宏定义是用宏名代替一个字符串,也就是作简单的置换,不作语法检查。原创 2023-10-17 17:32:55 · 1612 阅读 · 0 评论 -
Verilog generate
语句结构是通过判断语句执行代码块,也就决定了每次最多执行一个代码块,这种情况下,对各个代码块使用相同命名是合法的,并且有助于保持对代码的层次化引用。循环生成构造提供了一种简单而简洁的方法来创建模块项的多个实例,例如模块实例、分配语句、断言、接口实例等。后面的内容为标签名,是generate语句模块名,目的是通过它对循环语句进行层次化引用。本质上,它是一种特殊类型的for循环,其循环索引变量为 datatype genvar。第一个例子是对always块进行了循环,第二个则是对实例化时的模块进行了循环。原创 2023-10-10 00:52:50 · 750 阅读 · 0 评论 -
Verilog文件读写系统任务
起始地址和读取长度都是设置数组型变量的参数, 如果存储数据的变量类型是非数组的 reg 型,则只会进行一次读取,直至 reg 型变量被填充完毕。c值在下次调用$getc时返回,文件fd自身内容不会发生变化,正常写缓冲区返回值code=0, 错误返回值为EOF。按格式froamt_str 写字符串到变量reg中,格式与$display指定格式一致,可返回字符串长度len。$fgets 任务读取时是按照字符串类型读取的, 文件中的1 --> ASCII码: 49。原创 2023-04-07 10:48:58 · 1566 阅读 · 0 评论 -
FPGA 串口通信
简单介绍在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据空闲状态时,为高电平起始位为一个单位长度低电平,停止位为一个长度高电平分析8位数据位1位停止位无校验位基本思路采集每一位中间时刻的数据作为这一位的数据 ( 也可以每一位多采几个时刻的数据,取众数 )框图状态机简单介绍在发送数据时将并行数据转换成串行数据来传输空闲状态为高电平,发送的起始位为一个低电平,发送的停止位为一个高电平分析-时序框图状态机使用三个always 模块。原创 2023-04-04 22:40:05 · 776 阅读 · 0 评论 -
RAM IP核
通过对BRAM( 块RAM )存储器模块进行配置,可以实现各种存储器功能( RAM, 移位寄存器,ROM以及FIFO缓冲器 )Block RAM资源, 一片是36K每一片RAM有完全独立的读写端口每一个端口都可以配置为32Kx1, 16Kx2, 8Kx4, 4Kx9(or8), 1Kx36(or 32), 512x72(or 64), 常用位宽为8,16,3236K 资源不一定能够完全使用, 只有在特定的位宽才可以使用36K每一块Block RAM可以被分割成独立的两块18K块RAM使用。原创 2023-03-23 00:17:27 · 1883 阅读 · 0 评论 -
FPGA时钟IP核
7系列的FPGA使用了专用的全局和区域时钟资源来管理和设计不同的时钟需求全局时钟:专用的互联网络,降低时钟的偏斜,占空比的失真和功耗 --> 资源有限专用的时钟缓冲、驱动结构,延时低区域时钟:只能驱动区域内部的逻辑资源和IO口Clock Management Tiles (CMT) 提供了时钟合成(Clock frequency synthesis ),倾斜矫正(deskew), 过滤抖动(jitter filtering) 功能一个CMT包 1个MMCM 1个PLL整体时钟资源视图。原创 2022-11-25 13:26:41 · 2349 阅读 · 0 评论 -
FPGA流水灯
8个led灯依次点亮,形成流水效果。原创 2022-11-20 22:19:13 · 212 阅读 · 0 评论 -
Verilog语法
Verilog是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。Verilog是硬件描述语言,编译下载到在编译下载到FPGA之后,会生成电路,所以Verilog全部是并行处理与运行的C语言是软件语言,编译下载到单片机/CPU之后,还是软件指令,而不会根据代码生成相应的硬件电路,而单片机/CPU处理软件指令需要取址、译码、执行,是串行执行的。input sys_clk, // 系统时钟。原创 2022-11-18 15:16:56 · 6383 阅读 · 0 评论