原创 FPGA学习之Quartus基本使用

2011-2-23 18:03 3288 12 12 分类: FPGA/CPLD

1、关于Altera Quartus II 的原理图表编辑基本使用:新建工程--file--new project wizard--接着next就是的了,但是要注意功工程的名字要和你的设计的顶层名字要一样。在建立好工程之后可以自己加入自己的各种文件,比如可以新建VHDL语言等,然后添加到工程中,也可以先建立好之后再在新建工程的时候向导内添加到工程中。

  初学者可以从最基本的原理图的编辑入手,用图标的形式建立自己的第一个基本门电路,然后可以自己生成添加到自己的原理图库中,方便以后调用。下面讲解建议一个最基本的与门电路然后仿真----file---new--block diagram/schematic file ---ok---然后出现原理图编辑窗口,可以在空白处双击左键,弹出原理图库选择窗口,在name中输入and2---ok,同理放入两个个input和一个output,然后连接这些原件, 将光标移动到连线处,按住左键拖到另外一处,命名信号名称A B C然后保存---编译。

  下面进入仿真阶段,file--new--vector waveform file---ok ---双击name下空白---弹出insect node or bus对话框,单击node finder,在filter的下拉菜单中选择pins:all-----然后单击list,将找到的所有的信号选中----单击>>----然后OK--OK,下面编辑输入信号,单击信号A,把A作为时钟信号,把B置高,然后保存文件,接着进入仿真阶段,首先单击assignment下面的setting,在simulation下面选择simulation mode选择functional(先是功能仿真,然后是时序仿真(timing)),设置完成之后然后就是生成功能仿真网络表,单击processing---generate functional simulation nestlist---生成完成后出现提示对话框,然后OK,直接单击功能仿真按钮即可。然后是时序仿真,只要将上面的仿真模式改变为timing即可。注意在仿真之前一定要先生成网络报表(Processing--generate functional  simulation netlist)。

  功能和时序达到要求后即可分配引脚(pins),单击assignment--pins,然后为每个信号分配相应的引脚名,最后编译,然后是下载了。

   关于下载的设置,在电脑连接好下载线后在assignment---device选项中进行相关设置。最后tools---programmer-----

  对于大多数的设计到这里也就是可以了,下面介绍quartus 的常用功能:
  tools---netlist viewers---RTL viewer可以看到综合后的RTL结构图与原理图一致。
  tools---netlist viewers---technology map viewers......

  下面介绍如何将画好的原理图生成常用的原理图库文件(.bsf),单击file---create/update---create symbol file for current file即可,以后就是可以直接调用。
  (注意:这里也可以将写好的代码进行原理图形式的封装,即是将写好的代码用原理图形式来表达,和对画好的原理图生成库文件是一个意思。)

2、文本编辑:加法器描述:verilog HDL

module exam_2(in1,in2,sum);
input in1,in2;
output [1:0] sum;
wire in1,in2;
reg[1:0] sum;

 always @(in1 or in2)
 begin
  sum=in1+in2;
 end
 
endmodule

注释---端口列表--端口定义---参数定义---具体语句实体---endmodule
注意:顶层模块名字exam_2要和你的工程文件名字保持一致,不然编译会错误。
其余的仿真操作和下载同上。

3、混合编辑(自底向上):前面两个只是告诉大家单一的描述方法实现某种电路的功能,所实现的功能相对简单。在实际的工程项目中都是由很多模块相互连接而构成的,模块有的又是由其他的混合编辑方法编辑的,有人VHDL 有人verilog等等不同,如何将这些进行综合,有必要掌握混合编辑设计方法。
   下面是一个十六进制计数器自底向上的设计方法:
首先建立cnt4_top的工程项目,建立两个VHDL文件,命名为cnt4.vhd  bcd_decoder.vhd,保存,在cnt4中输入如下代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt4 is
port(clk:in std_logic;
     rst:in std_logic;
     en: in std_logic;
  q:  out std_logic_vector(3 downto 0));
 end;

architecture one of cnt4 is
 signal q1:std_logic_vector(3 downto 0);

begin
Process(clk,en,rst)
begin
if en='1' then
 if rst='1' then q1<="0000";
 elsif clk'event and clk='1' then
    q1<=q1+1;
   end if;
  end if;
end process;
q<=q1;
end;

在bcd_decoder.vhd中输入如下代码:
library ieee;
use ieee.std_logic_1164.all;
entity bcd_decoder is
port(i:in std_logic_vector(3 downto 0);
 y:out std_logic_vector(7 downto 0));
end;
architecture one of bcd_decoder is
begin
process(i)
begin
 case i is
  when"0000"=>y<="11111100";
  when"0001"=>y<="01100000";
  when"0010"=>y<="11011010";
  when"0011"=>y<="11110010";
  when"0100"=>y<="01100110";
  when"0101"=>y<="10110110";
  when"0110"=>y<="10111110";
  when"0111"=>y<="11100000";
  when"1000"=>y<="11111110";
  when"1001"=>y<="11110110";
  when"1010"=>y<="11101110";
  when"1011"=>y<="00111100";
  when"1100"=>y<="10011100";
  when"1101"=>y<="01111010";
  when"1110"=>y<="10011110";
  when"1111"=>y<="10001110";
  when others=>y<="11111111";
 end case;
end process;
end;

然后分别将代码创建成相应的图元符号,采用file---created/update---created symbol file for current file命令生成,生成的图元符号在顶层设计中作为模块使用。
然后建立命名为出cnt4_top的图元文件,将两个生成的图元放入文件中,放入3个输入一个输出连接两个图元即可,最后仿真编译下载。

4、自顶向下的混合设计:
对于一个工程,常常是由课题负责人首先给出项目的基本构架,然后再由其他人分别完成各个功能模块,下面还是以上面的十六进制加法器为例进行说明:

首先建立名为cnt4_top_1的工程,然后新建一个原理图文件,然后在原理图编辑下面单击(block tools)按钮,在适当的位置放置一个符号块,选中这个符号块单击右键,选择block properties在general界面下输入设计模块的名字,cnt4模块名称inst1,然后在I/O标签下面输入端口的类型和名称,然后添加模块引线和设置属性。可以看到,每一个靠近模块的引线都有一个方框的字样,双击这个字样,弹出‘mapper properties’对话框,选择信号的输入或者是输出等属性,然后单击‘mapper’标签,添加节点名,然后单击add即可。(注意在设置I/O口属性的时候对于总线的描述要用[7..0]。这是8位总线描述方法)......

  在建立自己的整个工程的规划之后,然后就可以对每个模块进行实例化,创建设计文件,在选中的模块上面单击右键,在弹出的右键菜单下面选择Create Design File form Selected Block...然后选择自己要设计的语言或者方法。这样就可以用不同的方法来描述工程达到目标要求。

 原理图如下所示:

参考资料:《基于Quartsu II的FPGA/CPLD数字系统设计实例》
  周润景 图雅 张丽敏   编著


文章评论0条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /2 下一条