1. 硬件描述语言:是一种用形式化方法来描述数字电路和系统的语言。
2. 模块:描述接口和逻辑功能。
3. 延时的用法:#(Min:Typ:Max)即:#(1:2:3)
4. 10’D-20//错误—符号在位宽的前面
(2+4)’b011000//错误位宽必须是常数
5. 宏编译指令
`include “文件名.v”
`ifdef与`endif
`define <宏名> <宏内容>调用时候也要用`号例如`define msb 8
`define lsb 0
调用reg[`msb:`lsb] a;
6. 在门级语言中,参数列表第一位是输出,例如not gate1(s1n,s1);
and gate2(out,i0,s1n,s0n);
or gate3(out,y0,y1,y2,y3);
nand();nor();xor()//异或门;xnor();//同或门
gate1,gate2和gate3可以省略,可以不指定实例的名字
7. test bench测试平台中的输出要用wire类型,用来连接各个模块之间的连线,而输入必须用reg,它的写法如下:module test;
reg clk_in,reset;//输入用reg型
wire clk_out;//输出用线网型连接
initial
begin
reset = 1’b1;
#15 reset = 1’b0;
#20 reset = 1’b1;//注意initial中的语句是顺序执行的,因为是阻塞赋值,如果是非阻塞赋值应该是同时进行的,%&*非常重要
end
initial
clk_in = 1’b0;
always
#5 clk_in = ~clk_in;
div_clk U1(.clk_in(clk_in),.reset(clk_out),.clk_out(clk_out));
endmodule
8. 不可综合的Verilog结构:不支持字符串$display,不支持网线类型初始化wire,不支持defparam,deassign,不支持延时(#5),不支持MOS开关、双向传输开关、CMOS门和电源PULLUP和PULLDOWN,不支持循环语句forever和while,不支持Specify语句,不支持用户自定义元件UDP
9. 阻塞型:串行赋值(=),组合逻辑使用,在语句执行后立刻赋值改变 非阻塞型:并行赋值(<=)时序逻辑使用,在块结束后才赋值
10. Moore Machine:电路的输出取决于机器的状态而与其输入无关
Mealy Machine:电路的输出取决于机器的状态也取决于输入。
11. 有限状态机设计步骤:#1 逻辑抽象,得到状态转移图 #2 状态化简,尽可能合并
12. Verilog HDL语言的设计方法有:自顶向下,自底向上,模块化设计
13. 函数的写法: function[31:0] my_function;
input[3:0] operand,control;
case(control)
语句实现
endfunction
函数调用 function(n,control); //注意传递的是实参
*%¥函数不能启动任务,任务可以启动函数和任务,函数至少有一个输入变量,任务可以没有或有多个类型变量,函数返回一个值,任务不返回值,函数不能包含时间控制语句(#,@,wait等),不能被禁用
14. 任务task的写法:task my_task;
inout a,b,c,d;
语句实现
endtask
最后调用的时候用my_task(v,w,x,y);
15. 三态门:bufif0(低电平导通),bufif1(高电平导通)非门:notif0(低电平导通),notif1(高电平导通)
16. 同步和异步:同步指的是所有操作都共用一个时钟,异步指各个操作都有自己的时钟来触发
17. Verilog设计时不采用异步状态机,因为异步状态机不容易规范触发的瞬间,不容易判别触发脉冲式正常的还是竞争和冒险产生的毛刺。而同步时钟的时钟沿到达每个触发器时间几乎完全相同。
18. OR事件触发也可以用逗号代替:always@(a or b or c) === always@(a , b , c) @(*)可以把所有输入变量都自动包括进敏感列表
19. wire型数据用来表示用以assign关键字指定的组合逻辑信号,被assign赋值的都是wire,而reg型常用在always模块,在always模块内被赋值的每一个信号都必须为reg型,memory型是由reg定义的,例如:reg[n-1:0] 存储器名[m-1:0]; //定义了m个n位大小的存储器
20. 重新定义参数值用 defparam 例如定义parameter Option = 1;defparam Option = 16;
21. verilog的模型有行为模块(行为和功能)和结构模块(电路结构)
22. 电路系统的5中描述方法:系统级,算法级,RTL(),门级,开关级
23. 综合:是指把硬件描述语言描述的电路转换成能够实际实现的电路的逻辑网表的过程。时间控制语句,initial语句是不可以综合的。
24. 组合逻辑:输出只是当前输入逻辑电平的函数,与电路的原始状态无关,无记忆功能,无需时钟。时序逻辑:输出不只是当前输入逻辑电平的函数,还与电路目前所处的状态有关,有记忆功能,需要时钟触发。
25. 赋值:只允许在一个always块内对(reg)和(integer)型变量赋值。在多个always块中赋值会产生竞争和冒险。
26. 最简单的三八译码器:output[7:0] out;input[2:0] in;assign out = 1’b1<<in;
27. latch,flip-flop,register, PCI(Peripheral Component Interconnect)(声卡网卡电视卡扩展)
28. 名词解释,写出下列常见英文缩写的全拼及其中文释义。(5分)
FPGA:Field Program Gate Array
FIFO: First In First Out
FSM:Finite State Mechine
STA:Static Time Analysis
TCP/IP : Transmitter Control Protocol
29. 简述FPGA和CPLD的基础结构
CPLD:可编程逻辑阵列(LAB),可编程IO控制模块,可编程内部逻辑连线PIA
30. FPGA:可编程逻辑块(CLB),输入输出模块(IOB),可编程互联资源(PIR),SRAM结构的配置存储单元。
31. FPGA的开发流程
设计定义,模块分工,verilogHDL程序编写(quatusII),综合,仿真(modelsim)
请图示并解释建立时间(setup time)、保持时间(hold time)和时钟偏移(clock skew)。
32. 建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,
保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间
时钟偏移指的是时钟信号在各个负载路径上的延时差。有多种原因可能导致时钟偏移,例如互连线的长度、温度变化、容性耦合、器件时钟输入
33. 竞争冒险由于延迟时间的存在,当一个输入信号经过多条路径传送后又重新会合到某个门上,由于不同路径上门的级数不同,或者门电路延迟时间的差异,导致到达会合点的时间有先有后,从而产生瞬间的错误输出。这一现象称为竞争冒险
34. 什么是验证?什么是验证平台(testbench)?验证平台一般由哪几部分构成。编译过程的一部分,在该过程中,对代码进行检查,看是否与定义的特定规则相一致,以允许检验某些安全要求
35. 解决异步时钟域数据同步常用的方法?什么是亚稳态?亚稳态有什么危害?(其实后面可以再加个:如何解决亚稳态)
首先将数据缓冲起来,然后根据同步时钟读取数据。亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。亚稳态危害由于输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出0~1之间的中间电压值还会使下一级产生亚稳态(即导致亚稳态的传播)。
36、锁存器latch的产生:always模块中如果在给定条件下变量没有赋值,这个变量将保持原值,产生锁存器;
always的事件触发中没有定义,而在赋值中用到了,那么会产生锁存器
copy from: http://blog.163.com/zhengwei_668/blog/static/3096288920101016105155294/