首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

【Zynq学习系列】自定义IP核:PWM发生器

【Zynq学习系列】自定义IP核:PWM发生器

在这篇实例之前,说点自己的两点感受。
一、这个zynq开发流程基本上是这样一个节奏:PlanAhead为软硬件结合的载体,在此可以设计硬件,然后将硬件导出到软件设计。基本流程如图:


这里三个软件切换来切换去,极其麻烦,并且其中还可能要FPGA开发用到的ISE,应该不是xilinx想要的结果,预计以后会集成到一个软件上。
二、刚使用这个平台不久,碰到bug不少,说明xilinx推出时准备不是很充分。
用户IPcore与PS交互数据分两种方案:一种是通过EMIO交换数据,将PL的IP核当做系统外设,性能有所欠缺。
常用的是第二种:满足AXI协议的IP核。此IPcore与AXI密切相关,难度较高。为降低难度,xilinx提供wizard自动生成axi总线相关代码,做好地址译码逻辑、读写控制逻辑,并在工作区生成一些寄存器。用户PL逻辑通过读写这些寄存器与PS交互。
以PWM发生器为例,有两个寄存器,一个调节周期的寄存器,一个调节占空比。PlanAhead建立工程,添加嵌入式资源进入XPS,添加xml配置之后,进入XPS Hardware —> Create or Import Periphera。开始添加IPcore wizard过程,注意在 IP interface阶段,user logic master support表示ip核内部是否要加入master接口,一般用在较复杂外设。software reset和include data phase timer分别为是否开启软件中断和数据周期计时器,在此我们不要这些,防止生成多余的AXImaster接口、复位和计时模块。下一步选择寄存器数量,这里我们用到占空比和周期reg,因此设为2。下一步仿真平台不要,下一步勾选二三项,第一项是生成verilogVHDL,我要VHDL,不选,二表示生成一个ISE工程便于测试和调试IP core。三表示生成软件驱动库文件,方便在SDK中使用IP core。完成wizard。
配置完成,接下来添加刚完成的IPcore,在IP catalog中双击添加,不用修改ok即可在 bus interface可找到刚添加的pwm_ip_0,右键之,view MPD,添加pwm_out接口,1bit的输出PORT pwm_ou = "", DIR =o这里添加的代码在systemassembly view中的port映射出添加的pwm_out,
问题:在wizard完成后出现pwm_ip.vhd文件没有user_logic的component块。原因:勾选Generate stub ‘user_logic’template in verilog instead of VHDL之后会生成。
右键pwm_ip_0,选择browser HDL sources 选pwm_ip.hdl在component加用户逻辑user_logic,继续右键pwm_ip_0,选择browser HDL sources 选user_logic.v添加自己要加的功能,这里我们加pwm发生功能,代码如下
wire ovprd;//下一个周期开始信号
reg [C_SLV_DEIDTH-1 : 0] pwm_counter;
wire pre_pwm_out;//预输出信号
----------------------------------------
always @(posedge Bus2IP_Clk) begin
if(!Bus2IP_Clk || ovprd || ~slv_reg1[31])//时钟0,下一个周期开始1,占空比reg31位0 计数器复位
pwm_counter = 32'h8000_0000;
else if(slv_reg1[31])
pwm_counter = pwm_counter + 1'b1;
else
pwm_counter = pwm_counter;
end
assign ovprd = (pwm_counter[30 : 0] == slv_reg0[30 : 0])? 1'b1 : 1'b0;
assign pre_pwm_out = (slv_reg1 < pwm_counter)? 1'b0 : 1'b 1;
assign pwm_out = pre_pwm_out & slv_reg1[31];
然后project—>Rescan User Repositories更新,可以在ports中看到新添加的引脚,选择exteral ports连接管脚。
在Address中右上角Generated Address自动分配地址
Project—> Design Rule Check 没有错误后关闭XPS回到PA
右键module_1,create top HDL
add source 选择添加约束,对应之前的工程名
run synthesis,出现错误,如下图1


重新建程序,更改新建xps工程名以及PA的约束名为system,而不使用module_1默认名,另外一个改动是wizard建立ipcore过程中去掉data phase timer模块。之后错误消失,但是警告如图2,这个警告是由于约束地址造成,关系不大。


下一步打开open synthesized design(不点开这个在PA界面找不到IO ports标签)打开IO ports,设置pwm_out的引脚,然后保存(点击PA的保存标签会让你选择一个ucf文件来保存,不需要自己另外写)。
Generate Bitstream 然后导出硬件到SDK,新建xilinx cproject,选择hello world模板。
注意接下来是将自己的pwm_ip导入的过程,跟上一个实验不一样的地方。选择xilinx tools —> Repositories 点击new 找到工程路径到edk,ok。右击hello_world_bsp_0,选择Board Support Package Setting,找到drivers中的pwm_ip_0,将drive栏目下的generic修改为pwm_ip,自此自设的IP核驱动就已经添加进来了。这里会报错,这是xilinx的一个bug,在hello_world_bsp_0上有一个红叉,在pwm_ip_selftest.c中加入#definePWM_IP_USER_NUM_REG_2,添加之后还是报错,如图3


注释掉
添加C代码
PWM_IP_mWriteReg(XPAR_PWM_IP_0_BASEADDR,0, 10000);
PWM_IP_mWriteReg(XPAR_PWM_IP_0_BASEADDR, 4,0X80000000+5000);//5000/10000=50%
保存报错'XPAR_PWM_IP_0_BASEADDR'undeclared (first use in this function)
修改后报错cannot find -lxil(可能是project_1没有改为对应pwm_ip_test,导致库文件宏定义之类的不能调用)
发现PWM_IP_USER_NUM_REG 2多写了个下划线的错误。修改后错误依旧,貌似不会重新编译。因此要重新从PA导出硬件到SDK。
选择Xilinx Tools->Program FPGA
在hello_world_0工程上右击,选择RunAs->Launch on Hardware运行出现各种错误,如下图4、5



换成memorytest模板后,万用表查看JA1约为1.2V。用示波器看波形结果是正确的。helloworld模板不行,具体原因不明。
总结:
第一、添加user_logic.v时要求为verilog代码,在wizard过程中尝试过使用VHDL而不是verilog,结果是生成的pwm_ip.hdl中没有user_logic的component模块。而pwm_ip.hdl又是VHDL语言,极其不便。
第二、添加约束时使用默认的module_1文件名,综合时会出错,改名为system则通过。
第三、在SDK中添加#define PWM_IP_USER_NUM_REG 2后不会自动编译进去,需要重新新建 Xilinx CProject才能正常使用。
第四、使用hello world模板会出现不明问题导致RunAs->Launch onHardware出错,改为memorytest模板正常。
来源:chchlcc的专栏 (http://blog.csdn.net/chchlcc/article/details/16890579
记录学习中的点点滴滴,让每一天过的更加有意义!
不温不火的软控制www.jasendg.com

宗室中为争夺最高权力而演成刀枪相向、血溅宫墙的残酷斗争,多为不得已而采取的极端手段。其实政治也是一门艺术,作为“政治演员”的帝王也有AB角色和艺高艺拙之分。唐太宗李世民挟父杀兄虽告成功,但他却不能算是政治艺术操作中的好演员。魏文帝曹丕就比他表演得出色多了,而曹丕的出色之处就是对待有可能对己构成威胁的宗亲兄弟多采用不温不火的软控制术。www.jasendg.com
许多人都知道,虽然曹丕于政治方面略胜其弟曹植一筹,但曹植始终是他心中一道使人不悦的阴影。曹植文才过人,诗赋属文方面常使曹丕在公开场合尴尬不算,曹操竟差一点把曹植立为太子,这更使曹丕难以释怀。所以,曹丕在用尽心思继父为王后,一直把曹植视为眼中钉、肉中刺。曹植虽然为人不拘小节,但除掉他又难以找到过硬的借口。因此,对症下药,曹丕对曹植采用的是慢性消磨的控制使用法。曹丕上台后,先把曹植由陈思王降封为鄄城王,之后又把他打发到离京城很远的雍邱。不久,再降封为东阿王。几年中数次改换封地,而封地每况愈下,还常派人监视限制曹植的行动自由。有一次,曹丕猫戏耗子式地向曹植发难,要曹植在行走七步中写出一首诗来,不然就得杀头。曹植不愧是位文学天才,竟然七步成诗,诗云:“煮豆持作羹,漉菽以为汁。萁在釜下燃,豆在釜中泣。本是同根生,相煎何太急。”此诗意在劝谏曹丕看在一母同胞的份上,不要无缘无故加害于他。史载曹丕听后面有惭色,因此没有对曹植“行”。但是,此后曹丕对曹植的并没有停止。曹植远离京城,每次进京求见,曹丕都以各种理由搪塞阻止。直到曹丕死后,曹NDE43继父为帝,在对待曹植的态度上,奉行的仍然是其父文帝那一套。据载,曹植曾多次上书曹NDE
43,要求给他一点机会,以便为国建功立业,但最终都是软钉子碰回。所以,曹植后半生一直心情抑郁,下情无由上达,终于在41岁时郁郁而终。www.jasendg.com
曹植虽然一生心情不畅,但总算得以寿终正寝,落了个囫囵尸首。他之所以能够完尸而去,从曹植方面讲,是因为他生性为文学家,未在政治上对曹丕构成真正的威胁;从曹丕方面看,他对曹植不睬不理,进行不温不火、无过也无不及的软控制也起了重要的作用。www.jasendg.com
返回列表