1 .only one modelsim instance. 一次只能有一个modelsim工程,不然出错。
2 .Edit-Preference C:\modeltech_10.1a\win32\modelsim.exe 改变isim或modelsim。
3 input ,output 默认wire。
4. 同步设计是很重要的,所谓同步设计可以简单理解为只有一个时钟,只有一个时钟沿,所有的设计都在一个时钟的步调下同步完成。
整个设计中只有一个全局时钟成为同步逻辑。 多时钟系统逻辑设计成为异步逻辑。
5. 时序约束:重中之重! "时钟是时序电路的控制者",时序是设计出来的,不是约束出来的!
时序收敛:通俗地讲,就是满足设计时序要求,即电路能在要求频率下正常工作。
6. FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线
,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,
不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。有FIFO的IP core,直接用即可。
7. case(addr)
16'hF080, 16'hF081, 16'hF082, 16'hF083, 16'hF084, 16'hF085, 16'hF086, 16'hF087:
sel = 1;
default: ;
8. wire tmp;//中间“变量”,在硬件上他就是一根导线,
assign tmp = in1 & in2;
assign out = ~tmp;
9. SERDES是英文SERializer(串行器)/DESerializer(解串器)的简称。
10 `undef # defparam
11.fan-out和fan-in 扇出
The number of circuits that can be fed input signals from an output device.
扇出,输出可从输出设备输入信号的电路的数量 。
出(fan-out)是定义单个逻辑门能够驱动的数字信号输入最大量的术语。
12. DCM主要功能
1. 分频倍频:DCM可以将输入时钟进行multiply或者divide,从而得到新的输出时钟。
2. 去skew:DCM还可以消除clock的skew,所谓skew就是由于传输引起的同一时钟到达不同地点的延迟差。
3. 相移:DCM还可以实现对输入时钟的相移输出,这个相移一般是时钟周期的一个分数。
4. 全局时钟:DCM和FPGA内部的全局时钟分配网络紧密结合,因此性能优异。
5. 电平转换:通过DCM,可以输出不同电平标准的时钟。
13. SelectIO:Xilinx IO口的称呼;因为IO口支持不同电平,不同标准,是可以选择select的,就叫selectIO。
14.rocket:火箭,rocket IO,高速IO口,如GTP,GTX。
15. FSM,同步有限状态机,大多采用merly。三段式,
16. 学习FPGA的时候,我们没有必要去细究每一个细节。所有的知识,只有当我们需要它的时候,我们再去了解就行了。入门知识,
只要掌握常用的,够用就行,这样子才能很快就上手做项目,积累出经验,也让自己积蓄起信心继续前进。要是一开始就对每一个问题
、每一个知识点都咬住不放,或者去钻研一些不常用的、以现有知识和经验无法理解的知识,只会让自己耗费大量的精力而进展缓慢,
让自己觉得学习FPGA太难,只会让自己丧失信心!
.资料不用贪多,有基本好的就可以了,基础的,提高的,应用性的,各有一本足够. 实践才是硬道理!让FPGA跑起来!
只要开始动手,在经历最初的困惑后就是水到渠成了
17.
18. clock skew(时钟漂移) :所谓时钟漂移:抖动的另一种形式,工程上给出这样的解释:当抖动频率小于10Hz的时候把这样的抖动叫做漂移。 jitter.
clock skew(时钟漂移),由于clock tree上的load不完全匹配(也不可能完全匹配)或physical design(P&R)等原因,
导致clock到达各个Flip-Flop的时间不一致,而这种时间上的偏差,通常是称之为clock skew
19. 原语就是常用的封装好的模块,单端转差分,差分转单端可用。IO口缓冲,全局时钟约束,DSP,BRAM原语。
DCM设置里,时钟信号来源可以选择是外部PIN进来的,这时要经过IBUFG之类的,也可以选择成内部BUFG输出来的信号,分别用两种方式例化即可。
20. IBUFG,BUFG::“使时钟延迟和抖动最小.IBUFG和IBUF作用类似,是IOblock部分;bufg用于将信号路由到全局布线
IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUFG单元,否则在布局布线时会报错。externel.
IBUFGDS是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。
BUFG是全局缓冲,它的输入是IBUFG的输出.全局时钟资源必须满足的重要原则是:使用 IBUFG或IBUFGDS的充分必要条件是信号从专用全局时钟管脚输入。
21. 全局时钟必须接入拥有GC属性的IO。
22. DDS是最为典型,应用最广泛的一种频率合成技术。 DDS Core。
23. 参数化的模块:
module adder
#(parameter MSB=31,LSB=0)
(
output reg [31:0} sum,
inout test
);
adder ADDRR #(.MSB(4),.LSB(1))(...);
24. Verilog‐2001中允许在声明变量的同时对其进行初始化赋值,他是在initial语句中的0时刻开始执行。
reg tmp=0;
24.always @(a,b,c,d);always@(posedge clk,negedge rst)
net型和reg型可以声明为带符号的变量
reg signed [63:0] data;
wire signed [11:0] alu;
函数的返回值可以是有符号数 16'shC501; //signed hex
25.操作符“>>>”和“<<<”。8'b10100011>>>3 = 11110100
增加系统函数$signed,$unsigned 用于在无符号和有符号数之间的转换
reg [31:0] arr[0:255][0:15];
wire [7:0] out = arr[100][7] [31:24];
26. 调制是通过改变高频载波即消息的载体信号的幅度、相位或者频率,使其随着基带信号幅度的变化而变化来实现的。AM,FM,PM.
27. Constraint Guide (cgd.pdf) xst.pdf
当软件报出一个Error或者Warning,不明白他的意思,不知道怎么修改,不知道是自己错了还是软件bug,就可以按这个Error Message去查找。
28.阻塞和非阻塞使用原则:
1.有clock的always区块要使用nonblocking。
2.無clock的always區塊使用blocking。
3.continuous assignment使用blocking。
4.一個always區塊中不能同時使用blocking與nonblocking。
29. 一個D-FF會delay 1個clk
在时序块的 RTL 代码中使用非阻塞赋值。
非阻塞赋值在块结束后才完成赋值操作,
在组合的 RTL 代码中使用阻塞赋值。
使用非阻塞赋值方式进行赋值时,各个赋值语句同步执行;因此,通常在一个时钟沿对临时变量进行赋值,而在另一个时钟沿对其进行采样。
30. 延时3个时钟周期:
module delay_3t (
clk,
rst_n,
d,
q
);
input clk;
input rst_n;
input d;
output q;
reg d_dly_1t;
reg d_dly_2t;
reg d_dly_3t;
assign q = d_dly_3t;
always@(posedge clk or negedge rst_n) begin
if (!rst_n)
{d_dly_3t, d_dly_2t, d_dly_1t} <= 0;
else
{d_dly_3t, d_dly_2t, d_dly_1t} <= {d_dly_2t, d_dly_1t, d};
end
endmodule
31.
module delay_nt (
clk,
rst_n,
d,
q
);
parameter n = 1;
input clk;
input rst_n;
input d;
output q;
reg [n-1:0] r;
assign q = r[n-1];
integer i;
always@(posedge clk or negedge rst_n) begin
if (!rst_n)
r <= 0;
else begin
for(i=0; i<n-1; i=i+1)
r[i+1] <= r[i];
r[0] <= d;
end
end
endmodule
module delay_nt (
clk,
rst_n,
d,
q
);
parameter n = 3;
input clk;
input rst_n;
input d;
output q;
reg [n-1:0] r;
assign q = r[n-1];
always@(posedge clk or negedge rst_n) begin
if (!rst_n)
r <= 0;
else
r <= {r, d};
end
endmodule
32.{}寫法是Verilog的獨門絕技,這樣就不再需要for,這也是為什麼Verilog寧願從C語言搶走{}換來begin, end。
33.下面的模块综合为两个触发器,其中采用了非阻塞赋值方式:
module nonbloc(clk,a,b);input clk, a;output b;
reg b;reg y;always @(posedge clk)begin y<=a;
b<=y;
endendmodule
34. case代表parallel mux,if else if代表priority mux。
35.
在RTL中,建議integer只配合for loop使用來複製電路,其他都應該使用wire或reg。 integer i;
大體上來說,wire和reg都類似於C/C++的變數,但若此變數要放在begin...end內,該變數就須使用reg,在begin...end之外,則使用wire。
另外使用wire時,須搭配assign;reg則不必。若在組合電路中使用reg,合成後仍只是net,唯有在循序電路中使用reg,合成後才會以flip-flop形式表示成register。
36.1. Binary、gray-code编码使用最少的触发器,较多的组合逻辑。而one-hot编码反之。由于CPLD更多的提供组合逻辑资源,而FPGA更多的提供触发器资源,所以CPLD多使用gray-code,而FPGA多使用one-hot编码
37. 软件无线电
构造一个具有开放性、标准化、模块化 构造一个具有开放性、标准化、模块化
的通用硬件平台,将各种功能,如工作频 的通用硬件平台,将各种功能,如工作频
段、调制解调类型、数据格式、加密模式、 段、调制解调类型、数据格式、加密模式、
通信协议等用软件来完成,并使 通信协议等用软件来完成,并使A/D A/D和 和D/A D/A
转换器尽可能靠近天线,以研制出具有高度 转换器尽可能靠近天线,以研制出具有高度
灵活性、开放性的新一代无线通信系统。 灵活性、开放性的新一代无线通信系统。
38. 软件无线电的核心技术 、软件无线电的核心技术
n n 带通采样(欠采样) 带通采样(欠采样)
n n 数字上下变频 数字上下变频
n n 调制解调 调制解调
n n 同步技术 同步技术
n n 多速率信号处理 多速率信号处理
n n 数字滤波等 数字滤波等
39. 硬件意识非C逻辑。
40. //引入临时变量不增加硬件逻辑