《PicoBlaze处理器软核中的KCPSM6应用技巧与案例.docx》由会员分享,可在线阅读,更多相关《PicoBlaze处理器软核中的KCPSM6应用技巧与案例.docx(17页珍藏版)》请在第一文库网上搜索。
1、PicoB1aze处理器软核中的KCPSM6应用技巧与案例PicoB1aze是8位微处理器,在Xi1inx公司的Virtex、Spartan-II系列以上F记A与COoIRUnne1n系列以上的CP1D器件设计中以IP核的方式提供,使用是免费的。常见的版本有KCPSM3和KCPSM6。其中KCPSM支持7系列的XiIinXFPGA0PiCOB1aZe非常小,只有一个VHD1/Veri1og文件,KCPSM6在FPGA中只需要26块逻辑单元S1ice,每个指令都可以再2个晅周期内完成,在Spartan-6中可以达到105MHZ时钟频率(-2速度等级),在Kin纹x-7(-3速度等级)中能到达23
2、8MHz。它能提供两个寄存器Bank,每个Bank有16个寄存器。KCPSM6ArchitectureandFeaturesOCopyright2010-2014XnxPteaMrefertodscrptknsonthfo11owingpageI:XK-INX.另外很多时候我们用FPGA的HD1语言很难实现某些功能,但是用软件方式就比较容易,但是我们又不希望花很多硬件资源去搭建一个嵌入式系统,比如基于MiCrOB1aZe的系统。这样,我们就可以使用轻量级的PiCOBIaZe实现。通常使用汇编语言写PiCoB1aZe程序,以KCPSM6为例,我们基于它的指令集可以很方便实现一些简单的程序,指令集
3、如下:KCPSIVI6InstructionSetMA:12bitddr000tTTTXM3-btconstant00toFFPP:-b1tport:000torrpI4-bitportXD0toFRgistfIoXEShiftandRotateintmftHand1ingS3OOxyO1OAD,X.SY4714x06S1OX.28000DXSAB1CINTERRUPTaO1xkk1OKDkk4714x07S11sX28001ENAB1XXNTERftOPT7:XxyOSTAR,YT14x04S1X5X1429000RETURN:DXSAB1CI7kkSTAR714x00S1AXB42900X
4、MTWN:KNAB1CFgOpcodeIAOtructiMR1SX109iC11Fg“83Eaaa“26XyOJUMP“JUMPZJUMPN2rJUMPCJUM?NCvJUW(SsY59IOxyOADO”SY7037001RCCBKKB59eoIIXrI2yADObXkkADOCYstYInputandOutput60UxkkADOCYXkk7308y0IMPUTX.S119xkkSGBbX.kk742CxyOOUTPUTB.(sY)(2IAxyOSUCY修X.SY742OxppOOTTOTbXpp62IBxkMSUBCY,X.kk702BkkpOVTWTKpAhthmettcTestarSc
5、ratchPadMmoryRgMrBankSetoction37000REGBAKXASubroutines6JOCxyO6JODxkk64OExyO64OFxkk65XCxyO(5IDxkk&IExyOtIFxkkP*QeMTESTSXtYTESTX.XkTESTCYXYTESTCYSXkkCOKPARsXSYC0KPREXkkCoKPARCCY8XYC0MPARCYXkka3Caa24XyO2500031000JSOOO)90003C00021xKkCA11CA11Z9aaaCA11NZtaaaCA11C.CAU.NCrM4CAU4(s.,Y)RHTOfUiRCTVRNZFETORNNZR
6、ETVMCRtTVWiHC10AD4RETWNXkKVrknContro1OCopynght20162014XJiraX4x80EXi11N)Ias:t-b1tcratchXdIocat1oaMtoITx:te9itrwitbinbanXWtoFy:ZqAttwithinbank0toFXi1inx提供了相应的汇编器,可以生成带指令数据的ROM的VHD1/Veri1og代码,也可以生成HEX文件供动态加载到幽?。下面介绍开发流程,我们以一个简单的开关输入皿输出为例,之后我们会介绍简单的流水灯以及中断。首先,我们去Xi1inx官网下载所需的KCPSM6的相关文件以及辅助程序。本文基于ZedBOa
7、rd进行试验,所以只需要下载PiCOB1aZeforU1traSca1e,7-series,6-seriesFPGAs即可。下载后解压出来,会有很多实例,JTAG1oader以及kcpsm6.exe汇编器等。以下是汇编器的功能图:your_program.psmnKCPSM6Assemb1eryour_program.vhdyour_program.v(Usedindesign)ROM_form.vhdROM_form.v(Temp1ate)KCPSm6处理器核与rom相连,rom中装载我们的编译后的代码数据。这两个模块都是通过工具生成,不过我们的程序还是需要写汇编代码实现。KCPSm6外部信
8、号很少,常用的就是in_port和OUt_port,地址线和bramenab1e以及instruction信号与rom相连,在不使用中断和休眠信号的一般情况下,我们的处蝇系统如下所示:情况下将interrupt和SIeeP拉低即可。C1k连接在FPGA外部输入的时钟引脚上,我们这里是Y9(IOOMHz)o本文使用Veri1og语言实现硬件逻辑。创建一个基于ZedBoard的xc7z020-2c1g484的工程。建立一个顶层文件top.V,参照下载的文件夹中的VeriIOg目录中的kcpsm6designtemp1ate,v,添加处理器核的例化JC:U$er$dcDesktopKCPSMpico
9、B1azeKCPSM6Re1ea$e930Sept14Veri1ogkcpsm6de$igntem.IO!回看M1i文件(F)喝率(E)超素视图(V)K(M)i8(1)a(T)(O)feh(R)插件(P)S(W)?X。白品OoSI4r%e3C1tH(ESHkcp6-dsjcn-t4*p1t.31109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143/TheKCPSMGparameterscanbedefinedasrequiredbutth
10、edefau1/andthesewou1dbeadequateformostdesigns.1/kcpsm6#(.interrupt_vector(),.scratch_pad_memory_size(:),.hwbui1d(8,hOO)3processor(.address(address),.instruction(instruction),.bram_enab1e(bram_enab1e),.port-id(port_id),.write_strobe(write_strobe),.k_write_trobe(k_write_strob.out_port(OUt_JPort)/.read
11、_strobe(read_strobe),.in_port(in_port),.interrupt(interrupt),.interrupt_ack(interrupt_ack),.reset(kcpsm6_reset),.s1eep(kcp9m6_s1eep),.c1k(c1k);S/Inmanydesigns(especia11yyourfirst)interruptands1eeparetheseinputs1owunti1youneedthem.assignassignkcp9m6_s1eep;interrupt1*b.;/Thedefau1tProgramMemoryrecomme
12、ndedfordeve1opment.z157Iine5:3881n:119Cd:31Se1:00DosWindow,.j,.iiH.vj添加内部信号7071W1KR(11:0Aririraaa;72wire17:instruction;73wirebrem_enab1e;74wire70pcrt_id;75wire7:0outport;76reg7:0in_port;77wirewrite_stroJoe;7RwiTRk_wr-ita_;79wireread_strobe;80reginterrupt;/Seenoteabove81WXXVxxi1cxxup1_auk;82wirekcpsms1eep;/Seeno,t-above8384regkcpsm6_reset;/Seenote-2rfin另外,由于我们暂时没用到中断和休眠,将kcpsm6SIeeP和interrupt拉低f!inanydcigno(copscia11yyourfirntinrcrruptand01c3pccnotuaod.ffTetheseinputs1ohunti1yoneedthem.-/a