微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 有个代码高人讲解一下

有个代码高人讲解一下

时间:10-02 整理:3721RD 点击:
这是一个步进电机的控制原代码,使用的时钟是40Mhz,98分频,使用串口输出。高人能不能解释一下这个代码。
module RCServo(clk, RxD, RCServo_pulse);
input clk, RxD;
output RCServo_pulse;
////////////////////////////////////////////////////////////////////////////
// use the serial port to control the servo
wire RxD_data_ready;
wire [7:0] RxD_data;
async_receiver deserialer(.clk(clk), .RxD(RxD), .RxD_data_ready(RxD_data_ready), .RxD_data(RxD_data));
reg [7:0] RxD_data_reg;
always @(posedge clk) if(RxD_data_ready) RxD_data_reg <= RxD_data;
////////////////////////////////////////////////////////////////////////////
// divide the clock
parameter ClkDiv = 98;// 25000000/1000/256 = 97.56
reg [6:0] ClkCount;
reg ClkTick;
always @(posedge clk) ClkTick <= (ClkCount==ClkDiv-2);
always @(posedge clk) if(ClkTick) ClkCount <= 0; else ClkCount <= ClkCount + 1;
////////////////////////////////////////////////////////////////////////////
reg [11:0] PulseCount;
always @(posedge clk) if(ClkTick) PulseCount <= PulseCount + 1;
// make sure the RCServo_position is stable while the pulse is generated
reg [7:0] RCServo_position;
always @(posedge clk) if(PulseCount==0) RCServo_position <= RxD_data_reg;
reg RCServo_pulse;
always @(posedge clk) RCServo_pulse <= (PulseCount < {4'b0001, RCServo_position});
endmodule

还差点
async_receiver deserialer(.clk(clk), .RxD(RxD), .RxD_data_ready(RxD_data_ready), .RxD_data(RxD_data));
把这个函数给粘上来

没有啊。我是在http://www.fpga4fun.com/RCServos.html上面看到的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top