Verilog与FPGA
文章平均质量分 55
记录verilog编程的一些技巧、硬件电路的转化,以及FPGA原型验证
qq_40946355
这个作者很懒,什么都没留下…
展开
-
AXI总线时序基本分析
1.握手协议简介(1)主要信号包括Address、data、control information,响应信号VALID/READY信号匹配(即两信号同时有效)来完成握手操作。2.信道总线分类(1)写地址信道(Write address channel)(2)写数据信道(Write data channel)(3)写响应信道(Write response channel)(4)读地址信道...原创 2020-03-10 21:24:44 · 1109 阅读 · 0 评论 -
vivado的RTL设计与联合modelsim仿真
以信号发生器为例,读取ROM中数据,并输出形成正弦波原创 2020-03-09 12:06:59 · 1371 阅读 · 0 评论 -
Vivado之block design与在线逻辑分析仪
以数字处理信号中的FIR滤波器为例完成block design并用在线逻辑分析仪观察输出。(1)放置所需IP块。选择右侧block design,右键Add IP,选择产生三角波的DDS,乘法器Multilayer,滤波器FIR(配置滤波系数可用matlab、Filter Solutions工具),时钟clocking compiler(2)配置物理信息。可用两个信号发生器产生1M和100MH...原创 2020-03-10 00:01:27 · 1885 阅读 · 2 评论 -
vivado封装与调用IP笔记
1.关于IP封装不能直接在Tools-Creat and Package 中包装文件夹,否则在IP Catalog会显示helper core不能例化解决:先把RTL文件引入到工程中,选择在当前文件工程中封装IP,这样封装出来的IP是可以调用的。IP设置中选择了Archive选项还会产生一个压缩包,里面主要包含顶层.v,.xci,.xml文件,便于其他使用者的调用2.关于IP的调用在一个...原创 2020-03-30 00:01:49 · 983 阅读 · 0 评论 -
uart通信例程分析
主题包含三个模块uart_top.c,test_uart.c,uart_trans.cmodule uart_top( clk, rst, txd ); input clk, rst;output txd;wire clk_i; clock cloc...原创 2020-03-12 23:52:47 · 361 阅读 · 0 评论 -
FPGA内部查找表(LUT)模块分析
FPGA以SLICE为单位实现组合逻辑,外围加Block、Multiplier,以及IOB实现外设通信。其中,最重要的是SLICE种的LUT4(Look-Up-Table)。每一个LUT4为4输入1输出的选择电路,4输入有16种情况。以如下代码为例module inner_LUT(input clk,input a,input b,input c,input ...原创 2020-03-15 16:47:15 · 1581 阅读 · 0 评论 -
multiboot之ICAP
目录0.前言1.ICAP的例化2.ICAP指令实现3.比特位交换4.跳转与fallback约束5.生成mcs镜像6.测试demo0.前言multiboot作为更新程序的一种方法,在FPGA的实现方法是将两个bit文件合成为一个mcs镜像。但是,flash默认只读取第一个从0开始的bit。要跳转到第二个bit文件时,可以用icap控制。1.ICAP的例化(1)使用原语...原创 2020-04-25 00:47:16 · 4881 阅读 · 15 评论 -
PS-PL通信:Zynq硬核通过AXI-Lite写寄存器
(1)block design,PL:program logicPS:processing system原创 2020-03-12 23:08:26 · 3983 阅读 · 0 评论 -
信号传输:为什么用差分信号
在PC机连接到开发板RJ45接口时使用的网线是双绞线,中间传输的信号形式为差分信号。差分信号在模拟电路的差分放大器中有涉及,简单来说,一对差分信号表示与基准电压的偏差,例如1.01V与0.99V可以表示成1±0.01V,1V则为基准电压,0.01V则为差分电压,形象地说就像跷跷板的两端。同样地,输出电压为0-5V信号,以2.5V为基准,0V或5V为振幅,处理信号时可以将2.5V看作虚地,则输入...原创 2020-03-07 11:34:25 · 1495 阅读 · 0 评论 -
FPGA内部资源
0.前言目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬核(ASIC型)模块。如图1-1所示(注:图1-1只是一个示意图,实际上每一个系列的FPGA都有其相应的内部结构),FPGA芯片主要由6部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。1. 可编程输入输出单元(IOB)可编程输入/ 输出单元简称I/O 单元,是芯片与外界电路原创 2020-06-27 11:01:26 · 591 阅读 · 0 评论 -
二进制码、格雷码与独热码
1.介绍在Verilog中最常用的编码方式有二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码。2.优缺点(1)格雷编码相邻状态转换时只有一个状态位发生翻转,这样能.消除状态转换时由多条状态信号线的传输延迟所造成的毛刺;.减少充放电次数,从而降低功耗。(2)独热编码即 One-Hot编码,又称一位有效编码,在状态机中很常见。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。.资源消耗量大原创 2020-06-22 11:55:53 · 3097 阅读 · 0 评论 -
异步FIFO学习笔记
一、前言异步,是指读写时钟频率不同,因此可以用来做跨时钟域处理。跨时钟域处理,单比特的数据一般采用两级寄存器缓存的方式(适用于由慢到快),多比特则采用异步FIFO、异步双口RAM处理。二、原理解析1.空满信号的产生空信号:读地址赶上写地址时产生空信号,因此同步写地址可以小于等于真实写地址,于是将写地址同步到读时钟域进行比较,产生真空或者虚空信号;满信号:写地址赶上读地址时产生满信号,因此同步读地址可以小于等于真实读地址,于是将读地址同步到写时钟域进行比较,产生真满或者虚满信号;2.格雷码的引入原创 2020-07-03 00:20:23 · 1200 阅读 · 0 评论 -
阻塞赋值与非阻塞赋值的RTL模型
1.非阻塞赋值:并行的当两个信号有依赖关系时,如地址与数据always @(posedge clk) begin b <= a; c <= b;endendmodulealways @(posedge clk) begin b = a; c = b; end原创 2020-06-03 23:50:30 · 271 阅读 · 0 评论 -
modelsim与quartus仿真的区别
1.器件延迟modelsim没有明显的器件延迟,而quartus器件延迟明显2.信号采样点当信号在时钟沿发生变化时,modelsim采样时钟沿之后的信号,quartus采样时钟沿之前的信号。原创 2020-06-03 23:04:50 · 3308 阅读 · 0 评论 -
用LUT换DSP示例
1.使用两个乘法器always@(*)begin if(cmd==1'b0)begin sum <= add0+add1; end else begin sum <= add2+add3; endend2.使用LUT共享乘法器资源always@(*)begin if(cmd==1’b0)begin ch1 <= add0; end else begin ch1 <= add2; end if(cmd==1’b0)begin ch2 &原创 2020-05-09 15:47:37 · 1011 阅读 · 1 评论 -
if-else RTL模型归纳
目录一、基本RTL模型1.if的模型2.if-else if的模型3.else 的模型二、避免产生锁存-latch1.latch的产生2.消除latch三、避免综合过度优化1.过度优化的产生2.避免过度优化的方法一、基本RTL模型1.if的模型always@(*)begin if(cmd==2'b10)begin done <= 2'b10 endendRTL模型为一个比较器2.if-else if的模型always@(*)begin if(cmd=.原创 2020-05-09 15:20:42 · 1276 阅读 · 0 评论 -
用模块调用的方法例化寄存器
//例化方法sirv_gnrl_dfflr #(`E203_PC_SIZE) pc_dfflr (pc_ena, pc_nxt, pc_r, clk, rst_n);//module实体module sirv_gnrl_dfflr # ( parameter DW = 32) ( input lden, input [DW-1:0] ...原创 2020-04-22 11:40:35 · 1029 阅读 · 0 评论 -
调用FPGA内部乘法器
1.当两个变量相乘2.变量与常数相乘3.要求乘法器/加法器不使用DSP block实现在synplify pro中有一个编译指令syn_multstyle,可以实现这个功能,参见synplify pro帮助文件中的说明:syn_multstyle Attribute Attribute; Lattice (LatticeECP2S/ECP2M/ECP2, LatticeECP/EC,...原创 2020-04-22 00:24:02 · 1657 阅读 · 0 评论 -
存储器模型
以32x256大小的交织器(按行写,按列读)为例描述存储器的基本模型、读写时序、读写技巧1.语法定义:parameter ROM_DEPTH;parameter ROM_WIDTH;reg [8:0] Line;reg [8:0] Column;reg [ROM_WIDTH-1:0] memory [ROM_DEPTH-1:0];有点类似于C...原创 2020-04-13 22:40:17 · 1163 阅读 · 0 评论 -
for循环的硬件电路转化
以按行写按列读的交织器为例://按C语言写法always@(posedge clk or negedge rstn)begin if(!rstn) begin rdata<=0; end else if (!w_r)begin//写入 for (Line=0;Line<=ROM_DEPTH;Line=Line+1) for(Column=0;Column<...原创 2020-04-13 21:53:22 · 637 阅读 · 0 评论 -
System verilog:测试模块的“.”连线能否传递信号
在处理器之类的大型工程中,常会出现类似于结构体的连接,例如`define CPU_TOP u_e203_soc_top.u_e203_subsys_top.u_e203_subsys_main.u_e203_cpu_top`define EXU `CPU_TOP.u_e203_cpu.u_e203_core.u_e203_exu`define E203_PC_SIZE 32 wire ...原创 2020-03-30 00:57:33 · 534 阅读 · 0 评论 -
assign的选择用法示例
1.有优先级的assign out2 = sel1?in1[3:0]: sel2?in2[3:0]: sel3?in3[3:0]: 4'b0; 2.并行选择的assign out1=({4{sel1}} & in1[3:0]) | ({4{sel2}} & in2[3:0]) |({4{sel3}} &...原创 2020-03-15 16:50:11 · 6225 阅读 · 2 评论 -
inout端口示例
要实现输入输出的管脚复用,在RTL Viewer中产生下图中红色加粗的器件,Verilog怎么描述呢?其示例代码如下:module bidirec (oe, clk, inp, outp, bidir);// Port Declarationinput oe;input clk;input [7:0] inp;output [7:0] outp;inout ...原创 2020-03-06 23:30:20 · 1183 阅读 · 0 评论