被动模式下ST-BUS发送模块的基本工作原理与接收模块类似,所不同之处在于数据传输方向相反。与接收模块一样,图2(b)中的时隙定位和数据位定位也可以合并采用单计数器实现。ST-BUS总线发送操作的关键之处也在于前一帧31时隙与当前帧0时隙之间的切换,因为需要同时检测同步信号,并且状态转换和总线数据加载都在C2上升沿完成。发送模块的 Verilog HDL实现可划分为两部分,与接收模块划分不同,这里已把发送数据的操作嵌入到了同步检测和定位计数当中,当然也可严格按功能块划分。
(1)同步检测及数据发送
if(!f0) begin file://同步信号低电平有效
f0_flag<=1;//同步状态标志
bitcounter<=bitsofbyte-1;//位计数器复位
bytecounter<=0; file://时隙计数器复位
if(byte_pos1==0) file://通道1为时隙0,则开始发送数据
begin dx<=data1[7]; file://先送高位到ST-BUS总线
dout1<=data1<<1; file://移位准备下一位待发数据
dout2<=data2;end file://准备下一通道待发数据
else if(byte_pos2==0)//通道2为时隙0,则开始发送数据(同通道1)
……
else dx<=1'bZ; end file://如果没有选择0时隙,则输出高阻,释放总线
(2)定位计数及数据发送
if(f0_flag) file://判断同步状态
begin case(bitcounter)
0:begin bitcounter<=bitsofbyte-1;//位计数器复位
if(bytecounter==(bytes_per_frame-1)) bytecounter<=0;//时隙计数满则复位
else bytecounter<=bytecounter +1;//时隙计数器递增
if(bytecounter==byte_pos1-1)
file://通道1发送数据
begin dx<=dout1[7];
file://发送数据的最高位
dout1<=dout1<<1; end
file://移位准备下一位待发数据
else if(bytecounter==byte_pos2-1) file://通道2发送数据(同通道1)
……
else dx<=1'bZ;end
file://非占用通道则释放总线
default:begin
bitcounter<=bitcounter-1;
file://位计数递减
……
file://同前面通道1、通道2发送数据
end endcase end
根据ST-BUS总线收发规则及发送模块基本工作原理,发送模块各功能块均采用C2上升沿,或者采用C2下降沿转换状态而采用C2上升沿发送数据。对前者,以上发送模块可用1个或2个always语句完成;对后者,以上发送模块则至少需用2个always语句实现,并将数据发送从以上两部分中分离出来。采用类似接收模块的方法,对发送模块单独综合后作时序仿真,结果如图3(b)所示。值得注意的是,为了说明模块设计对于通道设置顺序的无关性,图中第一通道为31时隙,第二通道为 0时隙。
ST-BUS控制模块 ST-BUS控制模块主要完成ST-BUS总线的收发控制与协调,同时也负责与外部接口的数据交换功能,这部分代码因涉密不再列出,这里仅简单介绍一下其功能。
控制模块的功能划分大致分为以下5部分:外部接口时钟产生及管理,控制收发模块与控制模块的数据交换,控制接口模块与其它接口的数据交换,对速率不匹配的数据作缓存(FIFO),提供对外通信接口供用户设置参数。根据实际应用情况,以上所列的功能可以适当取舍或调整。如果速率匹配,则可以舍弃第4部分;如果参数固化,则可舍弃第5部分。
结语 基于MAX7000S系列CPLD器件分析收发模块的最高工作性能可知,接收模块的位时钟C2最高工作频率可达21.74MHz,而发送模块的位时钟C2最高工作频率则达到32.26MHz,完全符合设计要求。本文所设计的ST-BUS接口模块具有很强的通用性、可扩展性和可移植性,利用 MAX7000S系列CPLD器件成功实现了ST-BUS与UART、RS-232、RS-485等接口单元的顺利对接,并已成功应用于某专用集群通信设备的E1接口板,完成了多路不同接口的数据复接通信,运行状况良好。
上一页 [1] [2]
本文关键字:接口 接口电路,单元电路 - 接口电路