上一节我们观察了AXI总线的信号,了解了基于AXI总线读写的时序,这一节我们继续探索基于AXI总线的设计,来看一看ZYNQ系列开发板的独特优势,PS可以控制PL产生定制化的行为,而不需要去动硬件代码。
这次实验是产生频率和占空比可调的PWM(Pulse Width Modulation)信号,调用8次,产生8路PWM波,并用这些信号去控制8路LED灯,观察实验效果。后面会做一个比较。
用的板子是zc702。
新建一个工程,命名为PWM_AXI_Lite
创建基于AXI总线的PWM波IP
IP设计为一个寄存器负责控制频率,一个寄存器负责控制占空比。
创建一个IP核,tools-->Create and Package ,这里需要16个寄存器,创建方法见系列(六)、系列(七),这里命名为PWM_AXI_Lite。
在IP核工程里,新建一个PWM模块文件,这里占空比设计的比较糙,直接就用一个计数值代替功能,后面的软件设计要注意:
module PWM(
input clk,
input rst_n,
input cnt_set,
input fre_set,
output pwm_o
);
wire[31:0] cnt_set;
wire[31:0] fre_set;
reg [31:0] fre_cnt;
always @(posedge clk) begin
if(!rst_n) begin
fre_cnt <= 32'd0;
end
else begin
if(fre_cnt < fre_set)
fre_cnt <= fre_cnt+1'b1;
else
fre_cnt <= 32'd0;
end
end
assign pwm_o=(cnt_set>fre_cnt);
endmodule
在自动产生的实例文件里,添加端口信号和自定义功能,后面要约束到LED上: