赞
踩
办法一:修改逻辑表达式避免以上情况【需要逻辑分析能力】
办法二:采样时序逻辑,仅在时钟边沿采样【推荐,事实上也最常用】
办法三:在芯片外部并联电容消除窄脉冲【物理方法】
办法四:由于电容会降低速度,所以在高速电路中,可以利用选通的方式消除险象
建立时间Tsu:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的时间。
保持时间Th:触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的时间。
上图是第一张图的考虑延时的时序图,
CLK经过第一个触发器到第二个触发器的延时T_delay1=(第一个时钟延时时间Tlaunch+触发器内部延时Tck2q+第一个触发器到第二个触发器经过的组合逻辑电路的延时Tdp)
CLK直接到达第二个触发器的延时 T_delay2,图中的Tcapture
则时钟周期为T_CLK时,
建立时间=T_delay2+T_CLK-T_delay1
保持时间=T_delay1-T_delay2
在一个FPGA项目中,既有建立时间异常(setup violation),也有保持时间异常(hold violation),应该如何修改设计以使其正常工作?
办法二:T_dp组合逻辑延时(减小T_dp):优化组合逻辑延时,具体包括:
a. 增加一个中间触发器来切割Timing Path,分割组合逻辑延时(流水线结构)
b. 对于有较大负载的节点可以考虑插Buffer、逻辑复制的方法来优化扇出,减少关键路径上的负载(插Buffer,逻辑复制)
c. 小Cell换成大Cell,更换更大驱动的Cell,增强驱动能力
d. 更换SVT/LVT(速度快于HVT的电压阈值的单元库)的Cell
办法三:增大T_delay2,但是相应的会减小保持时间
办法四:缩短触发器内部延时Tck2q:
换成更快的时序逻辑单元,花钱!
办法二: 减小T_delay2,但是相应的会增大建立时间
可以看出,保持时间和建立时间有一些矛盾
ISE的全称为Integrated Software Environment,即“集成软件环境”,是Xilinx公司的硬件设计工具。一般用的都是vivado,看了一下ISE的仿真、综合和实现,感觉和vivado很相似。
DMA(Direct Memory Access,直接存储器访问)是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU对于其他的工作来说就无法使用。
(1) PS通过AXI-lite向AXI DMA发送指令,
(2) AXI DMA通过HP通路和DDR交换数据,
(3) PL通过AXI-S读写DMA的数据。
PS和PL数据交互网站
根据执行仿真的不同方法,Verilog仿真器可以分为以下3种类型:
(1) 解释型的仿真器。
解释型仿真器读入Verilog代码,在计算机的内存中生成数据结构,然后解释性地运行仿真,每次运行仿真时,进行一次编译,编译通常很快就可以完成。Cadence公司的Verilog-XL仿真器就是一种解释型的仿真器。
(2) 编译型的仿真器。
编译型的仿真器读入Verilog代码,然后把它转换为相应的C代码(或其他编程语言的代码)。接下来,用标准C编译器将该C代码编译成二进制可执行代码。执行这个二进制代码,就可以执行仿真器。编译型的仿真器的编译时间通常比较长,但其执行速度一般来说比解释型的仿真器快。Synopsys公司的VCS仿真器就是一种编译型的仿真器。
(3) 本地编译型的仿真器。
本地编译型的仿真器读入Verilog代码,然后把它直接转换成能在指定的机器平台上运行的二进制代码,机器的平台不同,编译的优化和调整过程也不同。这就是说,能在Sun工作站上运行的本地编译仿真器,不能在HP工作站上运行,反之亦然。Cadence公司的Verilog-NC仿真器就是这种本地编译型的仿真器。
标识符( identifier)用于定义模块名、端口名、信号名等。
Verilog HDL 中的标识符( identifier)可以是任意一组字母、数字、 $符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。
HDL知识点,WAIT语句有4种格式:WAIT,WAIT ON,WAIT UNTIL,WAIT FOR
时间变量time和实数变量real不能被综合
并行块fork···join不可综合,并行块的语义在电路中不能被转化。
寄存器未做赋值操作的话,其值是未知,在Verilog中用x表示;
线网类型可以理解为导线,其值是高阻,在Verilog中用z表示。
分为资源优化(面积优化)和速度优化
1, 资源共享就是一些元器件或者模块可以复用
2, 逻辑优化就是将逻辑简单化,多用parameter,多通过真值表直接写最简式(尽量少用逻辑判断)。
3,串行化牺牲速度,将并行(多器件快速度)变成串行
1,流水线设计就是避免两个触发器之间的逻辑延时过大,在期间穿插一些触发器。使触发器和触发器之间的延时减少。
2,寄存器配平基于流水线设计的改善:
3,关键路径法中的关键路径是并行运算中延时最大的,所以关键。优化该路径可以总体提高速度
4,乒乓操作法:器件double,切换配合运行,用资源换速度
5,加法数法:A+B+C,首先实现A+B,将其和锁存一个时钟周期再与C相加。
参考的题目是:
理论带宽 = 内存核心频率 × 内存总线位数 × 倍增系数 / 位字转换 = (1066/8) * 32 * 8 / 8
应用端带宽=应用端时钟 × 数据位宽 / 位字转换 = 200 * 128 / 8 = 3200 MB/s
DDR/DDR2/DDR3的区别:
内存的频率指标
核心频率:即为内存Cell阵列(Memory Cell Array)的工作频率,它是内存的真实运行频率;
时钟频率:即I/O Buffer(输入/输出缓存)的传输频率;
有效数据:传输频率则是指数据传送的频率。
DDR3-1066蕴含的信息
DDR3代表内存一次从存储单元取8bit数据。
1066指有效数据传输频率,除以8才是核心频率。
DDR在FPGA中如何运用?主要调用了MIG IP核
一个完整的VHDL程序包含结构体,实体,配置,程序包,库。
WAIT语句有4种格式:WAIT,WAIT ON,WAIT UNTIL,WAIT FOR
题目给的是被动并行,主动串行和JTAG加载,
但有的会说JTAG是被动配置一种。
所以说主动就是以FPGA主动发起配置,被动就是上位机发起配置,FPGA被动接收数据进行重配置
JTAG:标准的JTAG接口是4线:TMS、TCK、TDI、TDO
独热码值每个码元值只有一位是’1’,其他位都是’0’
独热码适合写条件复杂但状态少的状态机
格雷码适合写条件简单但状态多的状态机
TTL和CMOS是数字电路中两种常见的逻辑电平,LVTTL和LVCMOS是两者低电平版本。
TTL是流控器件,输入电阻小,TTL电平器件速度快,驱动能力大,但功耗大。
CMOS是MOS管逻辑,为压控器件,且输入电阻极大,CMOS电平器件速度慢,驱动能力不足TTL,但功耗小。
常用逻辑电平:12V, 5V, 3.3V
差分逻辑电平:我的理解是用逻辑电平时,想要表达某段信号,电压方差比较大,会导致有许多斜率较大的下降区域和上升区域,于是用差分电平来表示信号大小,可以有效的减小电压起伏。
差分逻辑电平包括LVDS、xECL、CML、HCSL/LPHCSL、TMDS等。
每次看到这个都要打开网址
下面自己总结一下:
行波时钟就是一般我会用到的分配方法,到计数到n,新产生的时钟翻转一次,就完成了n分频。
module top( clk,clk_out);
input clk;
output reg clk_out;
reg [2:0] cnt;
always@(posedge clk)
begin
if(cnt==3'd4)
begin
cnt<=3'd0;
clk_out<=~clk_out;
end
else cnt<=3'd1+cnt;
end
endmodule
但是行波时钟的问题就是以此产生的时钟可能衍生出种种延时不同的时钟。
解决方法就是用使能时钟,用计数器进行计数,计数到n1,n2…nx,标记一个使能en(x),这个使能可以产生其他的时钟,这样一来,其他的时钟便都是有这个最原始的clk衍生出来的(理解来看就是大家都是二代传人,没有三代以上,所以延时小)。
module top( clk,dataout); input clk; output reg [3:0]dataout; wire en; reg [2:0] cnt; always@(posedge clk) begin if(cnt==3'd4) begin cnt<=3'd0; end else cnt<=3'd1+cnt; end assign en=(cnt==3'd4); always@(posedge clk ) begin if(en) begin ........ end end endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。