跑丢的孩子

【赛灵思FPGA】零基础学习PicoBlaze

0
阅读(4069)

Lab1  入门例程

1  新建立一个工程

1.1  开始→所有程序Xilinx ISE Design Suite 13.2→ISE Design Tools→

     Project Navigator(相信这一步大家都会做,这里不再赘述);

1.2  ProjectNew Source新建一个VHDL顶层模块top

注意:这里先不添加任何端口

2  KCPSM6添加到你的设计中

2.1  解压KCPSM6_Release4_30April12.rar,找到kcpsm6_design_template.vhd文件,这个文件包含了KCPSM6的例化和声明语句,方便用户使用;

2.2  复制KCPSM6声明语句到你的设计中(说穿了,KCPSM6和其他硬件模块没什么区别,操作方式雷同);

2.3  为了例化KCPSM6,必须声明一些信号,而这些冗繁的工作也不需要你去做了。回到上一步中提到的VHD文件,找到信号定义语句,将其复制到你的设计中;

2.4  复制KCPSM6例化语句到你的设计中,方法如前;

2.5  复制<your_program>声明和例化语句到你的设计中,方法如同KCPSM6

2.6  这只是一个简单的入门实例,我们不需要使用中断和睡眠模式,所以我们还要添加两条语句:   kcpsm6_sleep <= '0';interrupt <= '0';

注意:参数映射时,注意一下C_FAMILY的设置。这个参数取决于你手中板卡的芯片型号。选择标准参照表2-1

2-1

Spartan-6

Virtex-6

7-Series

S6

V6

7S

完成上述步骤后,整个硬件就搭建起来了,如下图所示:

3  编写汇编文件

3.1  下载编辑软件WordPadNotePad并安装到你的PC机上;

3.2  编写如下汇编代码,保存时一定是以psm为后缀名,文件名暂定为test1,读者可根据自己的喜好取名;

         ;8LED

         constant led_port,01

         ;8DIP开关

         constant dip_port,01

start:   input s0,dip_port

           output s0,led_port

            jump start

这是一段简单的汇编程序,实现的功能是:读取8DIP开关的状态,然后把值赋给相应的LED

3.3  从解压文件里把kcpsm6.exeROM_form.vhd复制到你的工作文件夹里,也包括你的psm文件;

 

3.4  双击kcpsm6.exe图标,并输入你的psm文件的名字;

3.5  回车,汇编器开始工作,整个汇编过程非常快。如果编写的程序没有错误的话,它会显示汇编成功信息,否则,会报告错误;

3.6  添加kcpsm6.vhdyour_program.vhd文件到你的ISE工程中(你懂得啊,注意your_program.vhd这个文件是汇编器产生的文件);

                     

 4  添加I/O端口(现在你的设计已经包含了KCPSM6和程序存储器,但是并没有和FPGA管脚关联起来)

4.1  添加输出端口

4.1.1  将下列代码复制到你的顶层文件中;

  output_ports: process(clk)

  begin

       if clk'event and clk = '1' then

       -- 'write_strobe' is used to qualify all writes to general output ports.

              if write_strobe = '1' then

       -- Write to output_port_w at port address 01 hex

                     if port_id(0) = '1' then

                         led <= out_port;

                     end if;

              end if;

       end if;

 end process output_ports;

4.2  添加输入端口

  

 4.2.1  将下列代码复制到你的顶层文件中;

  input_ports: process(clk)

  begin

    if clk'event and clk = '1' then

          if port_id(0) = '1' then

               in_port <= dip;

          end if;

     end if;

  end process input_ports;

注意:敏感事件列表中的clk信号必须和KCPSM6的时钟信号一致!

4.3  添加实体端口;

5  添加管脚约束文件,综合、实现、产生位流文件、下载,相信面前的读者比我还熟练,这里就不在各位面前卖弄了。实验现象如下图所示:

恭喜你!完成了第一个PicoBlaze实验。