串行通信接口cpld.docx
- 文档编号:11361787
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:22
- 大小:283.23KB
串行通信接口cpld.docx
《串行通信接口cpld.docx》由会员分享,可在线阅读,更多相关《串行通信接口cpld.docx(22页珍藏版)》请在冰豆网上搜索。
串行通信接口cpld
常州信息职业技术学院
计算机学院(软件学院)
项目报告
学期:
2011第二学期
院(系):
计算机/软件学院
项目名称:
串行通信接口
指导老师:
王璐、孙飞
班级:
计应094
学号:
0908143407
姓名:
谢海燕
项目时间:
2011/3/17—2011/4/17
目录
一、项目要求
二、模块的构成
三、模块分析设计
I、主模块分析设计
1、收发模块的I/O信号
2、示模块的I/O信号
3、控制模块的I/O信号
4、时钟模块的I/O信号
II、时钟模块分析设计
III、控制模块分析设计
1、控制模块的逻辑框图
2、数据分配器的逻辑功能
3、译码器1的逻辑功能
4、译码器2的逻辑功能
5、译码器3的逻辑功能
6、译码器4的逻辑功能
IV、显示模块分析设计
1、显示模块设计的框图
V、发送模块分析设计
1、移位寄存器模块的I/O信号
2、去抖动模块的I/O信号
3、发送控制模块的I/O信号
4、发送模块的逻辑框图
VI、发送控制模块分析设计
1、发送控制模块的基本构成
2、发送控制模块的逻辑框图
3、译码器1的逻辑功能
4、译码器2的逻辑功能
VII、发送移位寄存器模块分析设计
1、发送移位寄存器模块的基本构成
2、发送移位寄存器模块的逻辑框
VIII、接收模块分析设计
1、接收模块的基本构成
2、10位移位寄存器模块的I/O信号
3、3位移位寄存器模块的I/O信号
4、判多模块的I/O信号
5、接收控制模块的I/O信号
6、接收模块的逻辑框图
IX、接收控制模块分析设计
1、接收控制模块的基本构成
2、接收模块的逻辑框图
3、格雷码计数器的逻辑功能
4、译码器的逻辑功能
5、数据选择器1的逻辑功能
6、数据选择器2的逻辑功能
X、收发模块设计分析
四、程序改错
五、引脚锁定
1、单独数码管引脚锁定
2、8个LED灯引脚锁定
3、四段数码管片选引脚锁定
4、四段数码管引脚锁定
5、码开关引脚锁定
6、其他引脚锁定
六、项目小结
一、项目要求
串行通信接口项目在实验板上构成一个全双工的串行通信接口,用户利用这个串行接口,可以与PC机或其它设备进行串行通信,并可以设置串行通信的格式。
系统的状态分成工作状态和设置状态:
在工作状态下,进行串行通信;在设置状态下,进行通信格式的设置。
该系统用5个数码管(一个单独的数码管和一个4位数码管)显示串行通信的格式,比如串行通信的波特率是4800,7位数据位,校验方式为偶校验,则数码管显示为“E48-7”。
当系统处于工作状态时,如果收到串行数据,则把该数据显示在发光管上,如果接收到的数据有错误(包括奇偶校验错误和帧错误),则让蜂鸣器发出响声。
在工作状态下,若用户按下K1按键,则把拨码开关上的数据发送出去。
在工作状态下,如果用户按下K2按键,进入设置状态,首先设置进行校验方式的设置:
这时单独的数码管闪烁显示,若用户按下K3按键可以改变校验方式(共有O、E、n三个取值)。
在此过程中,如果用户再次按下K2按键,可以进行波特率的设置:
这时4位数码管的高两位闪烁,若用户按下K3按键可以改变波特率(共有96、48、24、12四个取值)。
在此过程中,如果用户再次按下K2按键,可以改变数据位位数:
这时4位数码管的最低位闪烁,用户按下K3按键可以改变数据位的位数(共有8、7、6、5四个取值)。
在此过程中,如果用户再次按下K2按键,则系统又回到工作状态。
此项目通过用VerilogHDL语言,在QuartusII7.2环境下进行编程,完成电路图的设计,最后通过实验板下载,完成项目的功能的实现。
由于项目比较复杂,代码比较多,模块比较多,利用模块化进行设计,在进行项目设计时,模块化设计是非常好好的方法,可以给设计人员带来很大的便利。
二、项目模块的构成
项目运用模块化进行设计。
这个项目总共分成以下几个模块:
1、主模块分析设计
2、时钟模块分析设计
3、控制模块分析设计
4、显示模块分析设计
5、发送模块分析设计
a、发送控制模块分析设计
b、发送移位寄存器模块分析设计
6、接收模块分析设计
a、接收控制模块分析设计
b、接收移位寄存器模块分析设计
c、判多模块分析设计
三、模块分析过程设计
I、主模块分析设计
根据设计要求,该系统可以分成4个模块:
收发模块(进行串行通信的发送和接收)、显示模块(显示通信的数据格式)、控制模块(控制系统的工作)、时钟模块(向系统各部分提供各种频率的时钟信号)。
1、收发模块的I/O信号
收发模块是实际进行串行通信的模块,它应该通过Txd和Rxd两条线与RS-232电平转换芯片连接,串行数据就是通过这两条线进行发送和接收的。
控制模块应该向收发提供一组控制信号,包括是否可以进行串行通信的控制信号、校验方式控制信号、数据位位数信号,共5位信号。
该模块应该连接拨码开关和K1按键,以控制进行串行数据的发送,共9位信号。
该模块还应该连接8个发光管和蜂鸣器,用以显示接收到的串行数据,并警示数据的差错,共9位信号。
收发模块所需要的时钟信号有:
50Hz信号(用于K1按键的去抖动)、1000Hz信号(用于蜂鸣器的发声)、串行数据发送时钟信号(用于串行数据发送)、串行数据接收时钟信号(用于串行数据接收),共4位信号。
2、显示模块的I/O信号
显示模块要控制一个单独的数码管和一个4位数码管显示串行通信的数据格式。
显示模块的输出有:
控制单个数码管显示的8位信号、控制4位数码管显示的4位位选信号和8位字段码信号,共20位信号。
显示模块输入的数据信号有:
单个数码管的显示数据信号(4位)、4位数码管的显示数据信号(4×4位),共20位信号。
显示模块所输入的控制信号就是5个数码管的闪烁信号,当某个数码管需要闪烁,则对应位为“1”。
显示模块所需要的时钟信号有:
400Hz时钟信号(用于数码管动态显示)、1Hz时钟信号(用于数码管的闪烁)。
3、控制模块的I/O信号
控制模块应该连接K2、K3按键,用于设置串行通信的格式。
控制模块向收发模块发出1组控制信号,用于串行通信的使能信号、校验方式控制信号、数据位位数信号,共5位信号。
控制模块还要向显示模块输出数据信号,包括:
单个数码管的显示数据信号(4位)、4位数码管的显示数据信号(4×4位),共20位信号。
控制模块还要向显示模块输出闪烁控制信号,共5位信号。
控制模块还要向时钟模块发出两位控制信号,用于控制串行数据发送时钟、接收时钟的实际频率。
控制模块需要输入的时钟信号只有一个:
50Hz的时钟信号(用于K2、K3按键去抖动)。
4、时钟模块的I/O信号
时钟模块的输入信号是系统提供的24MHz时钟信号。
它输出的信号有:
1Hz信号、50Hz信号、400Hz信号、1000Hz信号、串行数据发送时钟信号、串行数据接收时钟信号(这两个信号的实际频率由控制信号决定),一共6位信号。
时钟模块接收的控制信号用于控制串行数据发送时钟、接收时钟的实际频率,共2位信号。
按照前面的分析,主模块的逻辑框图如下:
II、时钟模块分析设计
根据设计要求,时钟模块主要为系统各部分提供各种频率的时钟信号,因此该模块主要由几个分频器构成。
另外由于输出的发送和接收时钟信号的具体频率,受控制模块传来的信号控制,所以还需要一个数据选择器。
按照前面的分析,时钟模块的逻辑框图如下:
III、控制模块分析设计
根据设计要求,该系统可以分成这几个模块:
去抖动模块(用于K2、K3按键)、一个表示系统状态的四进制计数器、一个3进制计数器用于表示校验方式、另外两个4进制计数器分别用于表示数据位位数和波特率,另外还有4个译码器以及少量门电路。
1、控制模块的逻辑框图
按照前面的分析,控制模块的逻辑框图如下:
2、数据分配器的逻辑功能
该模块的数据分配器,用于控制(去抖动后的)K3按键信号的传递对象,当控制信号是00时,输出信号全是1;当控制信号是01时,K3按键信号传递给校验方式计数器,另两个输出信号是1;当控制信号是10时,K3按键信号传递给波特率计数器,另两个输出信号是1;当控制信号是11时,K3按键信号传递给数据位数计数器,另两个输出信号是1。
3、译码器1的逻辑功能
译码器1用于控制,当输入信号是00时(工作状态),输出是00000(无闪烁);当输入信号是01时(设置校验方式),输出是10000(单独数码管闪烁);当输入信号是10时(设置波特率),输出是01100(4位数码管高2位闪烁);当输入信号是11时(设置波特率),输出是00001(4位数码管最低位闪烁)。
4、译码器2的逻辑功能
译码器2用于给单个数码管传送显示数据,而显示的内容为“n”、“O”、“E”,当输入为0x时(无校验),输出为1010(显示“n”);当输入为10时(偶校验),输出为1110(显示“E”);当输入为11时(奇校验),输出为0000(显示“O”)。
5、译码器3的逻辑功能
译码器3用于给4位数码管的高2位传送显示数据,当输入为00时(9600波特率),输出为8’h96;当输入为01时(4800波特率),输出为8’h48;当输入为10时(2400波特率),输出为8’h24;当输入为11时(1200波特率),输出为8’h12。
6、译码器4的逻辑功能
译码器4用于给4位数码管的最低位传送显示数据,当输入为00时(8位数据位),输出为4’h8;当输入为01时(7位数据位),输出为4’h7;当输入为10时(6位数据位),输出为4’h6;当输入为11时(5位数据位),输出为4’h5;
IV、显示模块分析设计
显示译码器由显示译码器、数据选择器、变量译码器、四进制计数器以及一些门电路构成。
1、显示模块设计的框图
按照前面的分析,显示模块的逻辑框图如下:
V、发送模块分析设计
发送模块的核心是一个“并入串出”的移位寄存器子模块,它在(去抖动后的)K1按键信号的控制下,可以接收并行的拨码开关信号(还包括起始位和校验位);并在发送时钟的控制下,可以数据的移位,并把最低位进行输出到Txd引脚上。
发送模块还应该包括一个去抖动子模块,用于K1按键的去抖动。
由于我们的发送模块可以采用多种数据格式,并受到使能信号的控制,所以该模块中还应该有一个发送控制子模块,它的功能如下:
1转发发送时钟信号——在使能信号有效的情况下,把系统传来发送时钟信号再转发给移位寄存器模块,若使能信号无效,则不转发,这可以用一个与非门实现。
2转送拨码开关信号——在不同的数据格式下,传给移位寄存器模块的拨码开关信号是不一样的,有些时候要屏蔽掉一些位,还要处理校验位。
1、移位寄存器模块的I/O信号
移位寄存器模块应该通过Txd信号线与RS-232电平转换芯片连接。
移位寄存器模块接收的控制信号是去抖动后的K1按键信号,它决定移位寄存器是接收并行数据,还是进行串行移位。
移位寄存器模块接收的并行数据共有9位,包括8位拨码开关信号和1位校验位信号。
发送模块所需要的时钟信号是经过转发的串行数据发送时钟信号。
2、去抖动模块的I/O信号
去抖动子模块,用于按键的去抖动,这比较简单,只要一个D触发器就可以完成:
触发器的数据输入端D接按键,CP端接50Hz时钟信号,触发器的输出信号就是我们需要的去抖动后的信号。
3、发送控制模块的I/O信号
发送控制模块的输入的控制信号就是系统传来的5位控制信号,包括使能信号(1位)、数据位位数控制信号(2位)、校验方式控制信号(2位)。
因为要转发发送时钟信号,所以要有1位时钟输入信号和1位时钟输出信号。
又因为要转送拨码开关信号,所以要有8位数据输入信号,而输出给移位寄存器模块的信号应该包含校验位,所以输出的数据信号有9位。
4、发送模块的逻辑框图
按照前面的分析,发送模块的逻辑框图如下:
VI、发送控制模块分析设计
1、发送控制模块的基本构成
发送控制模块要转发发送时钟信号,在使能信号有效的情况下,把系统传来发送时钟信号再转发给移位寄存器模块,若使能信号无效,则不转发,这可以用一个与非门实现。
该模块要产生校验位,这可以把拨码开关上的数据相互进行异或而成,因为数据位的位数也是可变的,所以要先把这些数据的一些位进行清0(通过译码器1和与门实现),然后再进行异或。
然后再根据校验的方式进行处理:
如果是奇校验则不处理,如果是偶校验则取反,如果是无校验则固定为“1”。
这里还需要另一个译码器(译码器2),它完成数据位高3位和校验位的处理。
2、发送控制模块的逻辑框图
按照前面的分析,发送控制模块的逻辑框图如下:
3、译码器1的逻辑功能
译码器1就是根据数据位控制信号输出相应的屏蔽信号:
当输入是00(8位数据位),则输出为111;当输入是01(7位数据位),则输出为011;当输入是10(6位数据位),则输出为001;当输入是11(5位数据位),则输出为000。
4、译码器2的逻辑功能
译码器2,根据数据位控制信号完成数据位高3位和校验位的处理。
当数据位控制信号是00(8位数据位),则输出为:
校验位、000;当数据位控制信号是01(7位数据位),则输出为:
1、校验位、00;当数据位控制信号是10(6位数据位),则输出为:
11、校验位、0;当数据位控制信号是00(5位数据位),则输出为:
111、校验位。
VII、发送移位寄存器模块分析设计
1、发送移位寄存器模块的基本构成
发送模块移位寄存器(并入串出)模块应该由11位移位寄存器构成,在(去抖动后)的K1按键控制下,或接收并行数据(K1信号为1),或进行移位(K1信号为0),最低位作为串行数据输出(Txd)。
在接收并行数据时,最低位的值固定为1,这是因为一旦接收了并行数据,Txd引脚上就马上出现最低位的信号,而这时显然还没到发送数据的时候,所以应该发出高电平的“空闲位”。
在接收并行数据时,而次低位的值固定为0,这是起始位。
在接收并行数据时,高9位是控制模块转送的拨码开关信号和校验位信号(当数据位不足8位时,由发送控制模块在高位上添加上“1”)。
在进行移位时,在发送时钟信号的控制下,11位数据向低位方向移动,最高位固定补“1”(形成停止位)。
2、发送移位寄存器模块的逻辑框图
程序:
moduleyiweijicun(clk_out,key1_out,jiaoyan,txd);
inputclk_out,key1_out;
input[8:
0]jiaoyan;
outputtxd;
reg[10:
0]send_reg;
always@(negedgeclk_out)
begin
if(key1_out==1'b1)
send_reg[10:
0]={1'b1,send_reg[10:
1]};
else
send_reg[10:
0]={jiaoyan,2'b01};
end
assigntxd=send_reg[0];//把最低位送到发送引脚上
endmodule
VIII、接收模块分析设计
1、接收模块的基本构成
由于在接收过程中,要防止干扰,因此在同一波特率的情况下,接收时钟的频率要高于发送时钟的频率,在我们的系统中,接收时钟的频率是波特率的3倍。
接收模块的也有一个移位寄存器子模块,它由10位构成,接收数据位、校验位和停止位。
这个移位寄存器是“串入并出”的,它负责在(经3分频后的)接收时钟信号控制下,接收串行数据,并把收到的数据送发光管显示。
即使在使能信号有效的情况下,上述移位寄存器也不总是进行移位操作的——只有发现了起始位,才开始进行移位,在收到停止位后,应结束移位操作。
直接连接Rxd引脚的是一个只有3位的移位寄存器(也是“串入并出”),它在(未分频的)接收时钟信号控制下,接收串行数据,把一位串行数据转换成3位并行数据。
在空闲状态下,如果发现连续两个0,则认为是收到了起始位,立即启动前述10位移位寄存器的移位操作。
在进行10位移位寄存器移位时,其串行输入信号不要直接从Rxd引脚上输入,而是从3位的移位寄存器的并行输出再经过“判多”电路模块而来,这个判多模块实现这样一个功能:
若3位输入中有2位或3位输入为1,则输出为1;否则输出为0。
由于我们的接收模块可以采用多种数据格式,并受到使能信号的控制,所以该模块中也应该有一个接收控制子模块,它的功能如下:
3转发接收时钟信号——在使能信号有效的情况下,把系统传来接收时钟信号再转发给移位寄存器模块,若使能信号无效,则不转发,这可以用一个与非门实现。
4控制10位移位寄存器的移位操作,即给它提供经过3分频的接收时钟信号。
检验接收的数据是否有差错,从而向蜂鸣器输出警示信号。
2、10位移位寄存器模块的I/O信号
10位移位寄存器模块显然有1位串行数据输入信号线。
该模块另外还应该有10位并行数据输出信号线。
该模块还应该有1个用于移位的接收时钟信号线。
3、3位移位寄存器模块的I/O信号
3位移位寄存器模块显然有1位串行数据输入信号线。
该模块另外还应该有3位并行数据输出信号线。
该模块还应该有1个用于移位的接收时钟信号线。
另外该模块还应该附加一个或门,用于判断起始位(连续收到两位低电平信号,可以认为是起始位)。
4、判多模块的I/O信号
在我们的系统中,判多电路模块用于减少干扰信号,它应有3位输入信号,输出是1位信号
5、接收控制模块的I/O信号
接收控制模块要负责转发接收时钟信号,因此它有1位接收时钟输入信号和1位接收时钟输出信号。
还要输出1位(经3分频后的)接收时钟输出信号。
接收控制模块输入的控制信号包括系统传来的5位控制信号,包括使能信号(1位)、数据位位数控制信号(2位)、校验方式控制信号(2位)。
接收控制模块输入的控制信号还有从3位移位寄存器传来的起始位检测信号。
接收控制模块还要对收到的数据进行检验,所以它应该输入由10位移位寄存器模块而来的数据信号。
接收控制模块还要把其中的数据位送到发光管上,所以还需要8位输出数据信号。
6、接收模块的逻辑框图
按照前面的分析,接收模块的逻辑框图如下:
//判多模块
modulepanduo(in,out);
input[2:
0]in;//三位数据输入
outputout;//1位数据输出
assignout=in[2]&in[1]|in[2]&in[0]|in[1]&in[0];
endmodule
IX、接收控制模块分析设计
1、接收控制模块的基本构成
接收控制模块主要由格雷码计数器、译码器、数据选择器、3分频器以及一些逻辑门电路构成
2、接收模块的逻辑框图
按照前面的分析,接收模块的逻辑框图如下:
3、格雷码计数器的逻辑功能
格雷码计数器在值为0时(即空闲状态),不进行计数,在收到检测信号时,计数器被异步置1,以后在时钟信号的作用下,计数值按照格雷码当方式不断加1;当加到与输入的比较值相同时,计数器清零。
4、译码器的逻辑功能
译码器有2组输出,第一组输出用于指示格雷码计数器的最大值,在没有校验位时,若数据位控制是00(8位数据位),则输出应是9的格雷码;若数据位控制是01(7位数据位),则输出应是8的格雷码;若数据位控制是10(6位数据位),则输出应是7的格雷码;若数据位控制是11(6位数据位),则输出应是6的格雷码。
如果有校验位,则输出应比上述值多1。
译码器第二组输出根据数据位控制信号输出相应的屏蔽信号:
在没有校验位时,若输入是00(8位数据位),则输出为1110;当输入是01(7位数据位),则输出为1100;当输入是10(6位数据位),则输出为1000;当输入是11(5位数据位),则输出为0000。
在有校验位时,若输入是00(8位数据位),则输出为1111;当输入是01(7位数据位),则输出为1110;当输入是10(6位数据位),则输出为1100;当输入是11(5位数据位),则输出为1000。
5、数据选择器1的逻辑功能
数据选择器1,用于在9位的数据/校验位当中,选择输出8位数据位:
在无校验时,高8位是数据位;在有校验时,低8位是数据位。
6、数据选择器2的逻辑功能
数据选择器2,用于选择3位信号中的1位输出:
当输入是0x时(无校验),则输出是1’b1;当输入是10时(偶校验),则输出是反向器的输出;当输入是0x时(奇校验),则输出是异或门的输出.
X、收发模块设计分析
1、收发模块的基本构成
收发模块负责进行串行数据的发送和接收,显然该收发模块又可以分成2个子模块:
发送模块(进行串行信号的发送)、接收模块(进行串行信号的接收)。
2、发送模块的I/O信号
发送模块应该通过Txd信号线与RS-232电平转换芯片连接。
发送模块接收的控制信号包括:
串行通信的使能信号、校验方式控制信号、数据位位数信号,共5位信号。
发送模块应该连接拨码开关和K1按键,以控制进行串行数据的发送,共9位信号。
发送模块所需要的时钟信号有:
50Hz信号(用于K1按键去抖动)、串行数据发送时钟信号(用于串行数据发送),共2位信号。
3、接收模块的I/O信号
接收应该通过Rxd信号线与RS-232电平转换芯片连接。
接收模块也应该从控制模块获得控制信号包括:
串行通信的使能信、校验方式控制信号、数据位位数信号,共5位信号。
接收模块应该连接8个发光管和蜂鸣器,用以显示接收到的串行数据,并警示数据的差错,共9位信号。
收发模块所需要的时钟信号有:
1000Hz信号(用于蜂鸣器的发声)、串行数据接收时钟信号(用于串行数据接收),共2位信号。
4、收发模块的逻辑框图
按照前面的分析,收发模块的逻辑框图如下:
四、程序错误
1、程序中的main中的函数名要和工程名一致;
2、程序出错,如果出现reform是多长,现在多长,则是宽度定义不对;
3、顶层模块调用小模块时输入输出口和小模块顺序不一致;
4、编译错误提示:
“Error:
Can’taccessJTAGchain;ErrorOperationfailed
这是电缆线没有接好或者损坏或者电源没打开;
5、引脚错误会出现显示乱码、顺序错误等问题,调试前应先仔细检查各个引脚,确保无误;
6、顶层模块调用要记得定义连线(wire…);
五、引脚锁定
单独数码管引脚锁定
8个LED灯引脚锁定
.四段数码管片选引脚锁定
.四段数码管引脚锁定
拨码开关引脚锁定
其他引脚锁定
K1、K2、K3、串行输入输出、蜂鸣器的引脚锁定
六、项目小结
这学期开始的第二个项目,感觉上就和之前的教学方案不同,这学期很系统的,把所学的知识合并一起来完成一个项目,这样有目的性的学习,让我更了解自己学的这个CPLD知识到底能用在哪些地方,怎么用,给同学指明了方向。
CPLD与单片机的思想不能等同,所以我们不能以C语言的思想考虑问题,就如:
三分频里面的,beginif(count==2'b10)count=2'b00;elsecount=count+1'b1;end用C语言思想可以反过来,但是在CPLD不一样,在CPLD里面应该考虑电路板怎么工作。
而CPLD与单片机不同之处是,用模块化的方法编写程序,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串行 通信 接口 cpld