《Xilinx可编程逻辑器件设计与开发(基础篇)连载50:Spartan.docx》由会员分享,可在线阅读,更多相关《Xilinx可编程逻辑器件设计与开发(基础篇)连载50:Spartan.docx(3页珍藏版)》请在第一文库网上搜索。
1、Xi1inX可编程逻辑器件设计与开发(基础篇)连载50:Spartan12. 7PicoB1aze设计实例一、设计要求1 .picob1aze嵌入式系统,包括个8位的方波输出口,一个驱动两位7段1ED的输出口,一个班输入和一个中断输入。2 .在SPartan-3anstarter套件中实现。二、设计过程1 .在ISEI1X中建立一个新的项目,项目名为kcpsm3_int_test,并加入源文件kcpsm3.vhd,这仅仅是一个PiCoBIaZe控制器核文件,读者可以根据自己的爱好选择不同的设计语言。2 .编写PiCOB1aZe的汇编语言源程序,本例中的汇编源程序为int_test,psm,具体
2、如下。;Interruptexamp1e,CONSTANTwaveform_port,02;定义方波输出端口ID为02CONSTANTcounter_port,04;定义中断计数器输出端口ID为04CONSTANTse1_port,08;定义2位7段1ED选择输出端口ID为08CONSTANTpattern_10101010,AA;定义方波输出口初始值CONSTANTini_se1,O1;定义2位7段1ED位选初始值为O1NAMEREGsA,interrupt_counter;将SA寄存重新命名为interrupt_counter9start:1OADinterrupt_counter,00;
3、中断计数寄存器清零1OADs2,pattern_10101010;将方波数据载入寄存器s2中1OADsD,ini_se1;将位选值装载入寄存器SD币一ENAB1EINTERRUPT;使能中断9drive_wave:OUTPUTs2,waveform_port;输出方波OUTPUTsD,se1_port;输出1ED位还1OADs,FF;延时1oop3:1OADsi,FF1oop4:SUBsi,01ADDsi,01SUBsi,01JUMPNZ,1oop4SUBs,01JUMPNZ,1oop3XORs2,FF;方波值取反XORsD,FF;位选值取反JUMPdrive_wave9ADDRESS2B0;
4、定义程序存储地址int_routine:ADDinterrupt_counter,O1;中断计数器加1OUTPUTinterrupt_counter,counter_port;输出计数值OUTPUTsD,se1_port;输出位选1OADsF,FF;延时Ioop1:1OADsE,FF1oop2:SUBsE,O1ADDsE,O1SUBsE,O1JUMPNZ,1oop2SUBsF,O1JUMPNZ,Ioop1XORsD,FFRETURNIENAB1E;中断返回,ADDRESS3FF;中断入口地址JUMPint_routine3 .将int-tcst.psm文件拷贝到ASSenIbIer目录下,运行
5、DOS命令,进入Assemb1er目录,运行如下命令:kcpsm3int_test,psmscreen回车编译后ASSCmb1Cr目录中产生了一些新的文件,如图12-30所示。其中INT_TEST.VHD/INT_TEST.V文件为我们需要的文件,它就是PiCoB1aZe的程序存储器文件,将它加入到kcpsm3_int_test项目中。可以看到,生成的PROM文件名与汇编源程序的文件名相高。图12-30编译后ASSemb1er目录文件其中SCreen文件为一个文本文件,编译过程记录在此文件中,如果源文件有错误,错误信息会在此文件中找到。4 .建立一个顶层文件。在顶层文件中完成PROM文件以及P
6、iCOBIaZe核文件的连接。下面对顶层文件进行简要说明。例化kcpsm3和INT_TESTo初始化未用的PiCoBIaZe输入引脚in_port和reset。扩展输出寄存器,分别是WaVefOrmS、counter和sei,其端口ID分别为0x02、0x04和0x08o中断输入逻辑。将计数器的结果译码为7段1ED的输入编码。顶层文件源代码如下。1ibraryIEEE;useIEEE.STD1OGIC1164.A11;useIEEE.STDJOGIJARITH.A11;useIEEE.STD_1OGICONSIGNED.A11;entitykcpsm3_int_testisPort(1ED:o
7、utstd_1ogic_vector(6downto0);waveforms:outstd_1ogic_vector(7downto0);interrupt_event:instd_1ogic;e1k:instd_1ogic;se1p:outstd_1ogic);endkcpsm3_int_test;architectureBehaviora1ofkcpsm3_int_testiscomponentkcpsm3Port(address:outstd_1ogic_vector(9downto0);instruction:instd1ogic_vector(17downto0);portid:ou
8、tstd_1ogic_vector(7downto0);write_strobe:outstd_1ogic;out_port:outstd_1ogic_vector(7downto0);read_strobe:outstd_1ogic;in_port:instd_1ogic_vector(7downto0);interrupt:instd_1ogic;interruptack:outstd_1ogic;reset:instd_1ogic;e1k:instd_1ogic);endcomponent;componentint_testPort(address:instd_1ogic_vector(
9、9downto0);instruction:outstd1ogic_vector(17downto0);e1k:instd_1ogic);endcomponent;signa1address:std_1ogic_vector(9downto0);signa1instruction:std_1ogic_vector(17downto0);signa1port_id:std_1ogic_vector(7downto0);signa1out_port:std_1ogic_vector(7downto0);signa1in_port:std_1ogic_vector(7downto0);signa1write_strobe:std_1ogic;