quartus学习笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

注释无法直接打出中文,用文本编辑器打出后复制到注释处Quartus起名要求

总共涉及到的名字有工程名,模块名,具体描述模块的Verilog文件名,原理图文件名。

工程名为A,那么最终需要编译的文件的名字必须和工程名相同。只能将最终需要编译的原理图命名为A(可能一个工程下不只一个原理图,要将最后仿真需要的总原理图命名为A),而模块名一定不能为A。在Verilog程序中描述模块时,可以给模块起名为B,程序完成后不需要编译,直接create symbol,在一个Verilog程序中可以定义多个模块,名字均不同,并且可以在一个模块中使用其他的模块,在create symbol时程序中有几个模块就会相应产生几个器件。这个Verilog程序文件(.v文件)的名字可以为A或不为A。

总之:工程名为A,最终要编译的总原理图名一定要为A,原理图中使用的各模块名一定不能为A,定义这些模块的Verilog文件名可以为A或不为A。

建立相应的文件

block diagram/schematic file 建立原理图、表模块文件

vector waveform file 建立矢量波形文件,保存后仿真,分为功能仿真与时序仿真,功能仿真忽略了延时,时序仿真加上了延时

方法:assignments-----settings,在simulation mode 中

选择functional是功能仿真,timeing是时序仿真

设置完成后,要生成功能仿真网络表processing--generate

functional simulation netlist再点击按钮进行仿真

规划引脚分布:assignments—pin planner(必须要选定器件才能规划引脚)

触发器

D:Q*=D

JK:Q*=JQ’+K’Q

T:Q*=T’Q+TQ’

SR:Q*=S+R’Q

混合编辑

自底向上:建立工程,建立2个(或以上)所需的VerilogHDL文件,并输入代码保存。创建图元:file----creat/update----creat symbol files for current file,生成.bsf格式的图元文件。再新建原理图文件,上述图元文件就可以添加进原理图文件中了。

自顶向下:建立工程,建立原理图文件,放置符号块(block tool),在blockproperties中设置名字、I/O类型等,添加模块引线(node tool/ bus tool等)并设置属性(general选项卡设置I/O类型,mappings设置连线节点名称)。右击符号块选择create design file form selected block,选择verilogHDL语言,单击OK,在生成的“.v”文件中修改代码VerilogHDL语言

都是以module开始以endmodule结束的一段程序

Module<模块名>(<端口列表>)

<定义>

<模块条目>

endmodule

verilogHDL文件名,模块名要相同才不会报错。Assign连续赋值语句,一直检测等式左右两端变量,一旦其中一个发生变化,就重新赋值并传给等式左端输出。

在一个VerilogHDL文件中调用子模块:3个方法

法一:首先建立工程(eg.lm),再建立VerilogHDL文件(lm),编写完成后将其设置为顶层文件,project --set as top level entiey。再建立VerilogHDL文件(ll),当做子文件。即可在lm中调用ll了。VerilogHDL区分大小写;并且包含102个关键词,关键词必须小写Parameter(小写)进行参数声明,eg:parameter param1=count,BIT=1; 可以声明数字也可以是计算表达式。

预处理命令:见VerilogHDL程序设计与应用P19

中的`是键盘左上角1旁边的那个键在英文状态下的输入

法二:`include "F:\quartus\exercise\4调用子模块\ll.v"

module lm(in1,in2,out);

input in1,in2;

output out;

wire w1;

ll ll1(in1,in2,w1);

ll ll2(w1,w1,out);

endmodule

法三:等价于module ll(in1,in2,out);

input in1,in2;

output out;

assign out=~(in1&in2);

endmodule

module lm(in1,in2,out);

input in1,in2;

output out;

wire w1;

ll ll1(in1,in2,w1);

ll ll2(w1,w1,out);

endmodule

O(o)八进制B(b)二进制D(d)十进制H(h)十六进制

线网的声明语法:net_kind [msb:lsb] net1;

Net_kind是网线类型,[msb:lsb]定义网线宽度,不写默认是1([2:0]宽度为3)net1网线变量的名称

具体语句

赋值总是从最低位(右侧)开始向最高位进行,任何多余的位都会被截断。有两种赋值方法:一是“=”阻塞赋值,相当于串行,必须执行完这一句才能完成下一句;二是“<=”非阻塞赋值,看成并行,与下一

句可以同时执行;但是只能给寄存器赋值。

If条件语句下没有大括号,用begin----end来代替

用if语句最好加上else,用case,最好加上default,防止出现锁存器。Begin If(……)q=d;end (1)1产生了锁存器,因为在不满足……时无定义,q还要保持原先的值

Begin if(……) q=d;else q=0;end(2)2没有锁存器。在不满足……时,q被赋值为0.

顺序语句块

Begin

------------end

并行语句块:并行执行,与书写顺序无关

Fork ---------- join

Case语句:多选一

Case(判断)

A:---------------;

B:---------------;

Default:-----------;

Endcase

Casez语句:条件表达式和分支表达式的值z被认为是无关值。Casex:x,z被认为无关

Casez(Ask)

相关文档
最新文档