文档库 最新最全的文档下载
当前位置:文档库 › 基于FPGA的RS232设计

基于FPGA的RS232设计

基于FPGA的RS232设计
基于FPGA的RS232设计

课程设计(论文)说明书

题目:基于FPGA的RS232串口通信

院(系):信息与通信学院

专业:微电子学

学生姓名:

学号:

指导教师:

职称:副教授

2012 年 12 月 10 日

摘要

实验设计了基于verilog描述的RS232串口通信控制器,通过串口调试工具实现PC机和FPGA互发和接收数据。完成的功能包括实现收发一帧10个bit、波特率为9600的串口通信控制器,FPGA接收数据后显示在串口助手的接收数据栏里。实验的重心放在了RS232串口通信控制器发送模块和接收模块的设计,采用了自顶向下的思路进行设计。报告中给出了完整的设计思路和过程,并将系统分模块进行了详细的设计,给出了verilog语言描述。完成了各个模块以及系统整体的仿真验证。最终下载到实验板上测试通过。

关键词:RS232;verilog;串口通信;发送;接收;分频

Abstract

Experiment design based on the description of the Verilog RS232 serial communication controller, through the serial port debugging tools to achieve PC machine and FPGA sending and receiving data. Complete function includes transmitting a frame of 10 bit, baud rate to 9600 serial communication controller, FPGA receives the data displayed in a serial assistants to receive data column.

Key words:RS232 ; verilog ; Serial communication ;transmission ;receive ; frequency division

目录

引言

第一部分任务要求 (3)

1.1课题要求........................................................................................错误!未定义书签。

1.2设计目标 (3)

第二部分系统设计 (3)

2.1设计思路........................................................................................错误!未定义书签。

2.2系统结构设计 (3)

2.2.1系统结构框图 (3)

2.2.2系统逻辑功能划分 (4)

2.2.3层次模块划分 (4)

2.2.4模块设计图 (5)

2.2.5发送模块设计 (5)

2.2.6接收模块设计 (5)

2.2.7分频模块设计 (6)

2.2.8按键防抖模块设计 (6)

2.2.9译码显示模块设计.................................................................错误!未定义书签。

2.3系统硬件语言描述 (6)

2.3.1VHDL描述思路 (6)

2.3.2总体电路的描述 (6)

2.3.3分块电路的描述 (7)

2.4系统仿真验证 (13)

第三部分结果与分析 (14)

3.1实现功能说明 (14)

3.2器件资源分析 (15)

3.3故障和问题分析 (15)

第四部分总结与结论 (15)

4.1实验结论 (16)

4.2总结体会 (16)

第五部分附录部分 (17)

5.1元器件和仪表清单 (17)

5.2VHDL源代码.................................................................................错误!未定义书签。

5.3电路图............................................................................................错误!未定义书签。

5.4参考文献 (19)

引言

数据采集系统常需要进行异步串行数据传输。目前广泛使用的RS232异步串行接口,如8250、NS16450等专用集成器件,虽然使用简单,却占用电路板面积、布线复杂等缺点。片上系统SoC(System on Chip)是以嵌入式系统为核心,以IP复用技术为基础,集软、硬件于一体的设计方法。使用IP复用技术,将UART集成到FPGA器件上,可增加系统的可靠性,缩小PCB板面积;其次由于IP核的特点,使用IP核可使整个系统更加灵活,还可根据需要实现功能升级、扩充和裁减。这里采用VHDL语言编写 UART模块,将其集成到FPGA上,与器件其他功能模块构成片上系统SoC。

第一部分任务要求

1.1课题要求

设计并实现一个可以和PC机通过RS232协议进行通信的串口通信控制器。

1. PC机通过串口调试工具来验证程序的功能;

2.实现一个收发一帧10个bit的串口控制器,10个bit是1位起始位,8位数据位,1位结束位,无奇偶校验位;

3.串口的波特率选择9600bit,串口处于全双工工作状态;

4. PC机可随时向FPGA发送0~F的十六进制数据;

1.2设计目标

根据课题要求,实验中将目标进行了细化,叙述如下:

1. 设定数据帧格式为10bit,其中第一位为起始位,定位低电平,8位数据位,1位结束位,无数据传输时为高电平;

2.通过串口调试工具向FPGA发送数据,FPGA接收后显示串口调试工具的接收数据窗口;

第二部分系统设计

2.1系统结构设计

2.1.1系统结构框图

图2.1 RS232串口通信控制器系统结构框图

串口通信控制器的输入是PC 发送的数据。当发送数据按键按下时,FPGA 向PC 发送已定义好的数据。同时,当FPGA 检测到PC 发送数据帧的起始位时,开始接收数据,并行输出。 2.1.2系统逻辑功能划分

图2.2 RS232串口通信控制器系统逻辑框图

如图 2.2所示,系统可逻辑地划分为三个子系统:一是分频子系统,包括为发送模块和接收模块提供波特率为9600bit 的时钟;二是发送子系统,包括发送模块;三是接收子系统,包括接收模块和串口助手显示模块。 2.1.3层次模块划分

系统划分为两层,自顶向下分别是顶层模块、控制器子模块。顶层描述了整个系统的功能和运行;控制器子模块实现系统中各个独立而完整的功能部分,每个层次可用一个或多个具体模块加以实现。

A. 顶层模块:

作用为集成子模块功能,控制子模块的连接和耦合信号。定义名称为uart1,在其中例化子模块。

B. 中层模块:

具体实现顶层模块的描述,包括的功能主要是产生时钟信号,发送模块和接收模块的定义和状态的转移:

FPGA

发送数据

接收数据

PC

发送模块

接收模块

PC

分频模块

speed_select时钟分频模块,将50MHz的时钟分频为9600×1Hz的时钟。定义波特率为9600bit,波特因子为1。

输入:50MHz晶振信号。

输出:送往接收模块和发送模块的9600×11Hz的信号。

a)my_uart_rx

接收模块,检测接收端,若检测到低电平则开始接收数据,每隔1个周期接收一位数据,直到接满8bit。

输入:9600×1Hz时钟信号、PC机发送的串行数据。

输出:PC机发送的串行数据并行输出。

b)my_uart_tx

发送模块。当发送数据按键确定有效时向PC发送自定义的数据。

输入:9600×1Hz时钟信号、发送数据按键。

输出:字符串的串行输出。

以上模块分别定义在一个工程内,最后在顶层模块中用语言进行连接。

2.1.4模块设计图

发送模块设计

发送模块工作时首先检测发送数据下降沿到来,如复位信号有效时,控制器处于复位状态,一旦检测到复位信号无效并且检测到下降沿的到来则进入起始状态。从PC 接收到的数据帧:1位起始位+8位数据位+1()位停止位(无奇偶校验),检测到电脑端的起始位后(rs232_rx下降沿)打开波特率发生器,到起始电平时间的中点时检测数据,每隔“一个”电平时间,采集一次并存入接收暂存寄存器,待到1(或)个结束位到来后将接收暂存寄存器数据放入接收寄存器并关闭波特率发生器,清楚数据检测使能标志。

接收模块设计

与发送模块类似,接收模块分为检验下降沿到来、启动接收数据使能有效、接收数据处理等模块。没有检测到起始位时程序一直处于开始状态,一旦检测到低电平的起始位(neg_rs232_rx=1),则进入找中状态。定时计数器cnt=0时则进入等待状态,当定时计数器cnt=1时对数据进行采样,直到移位计数器rx_temp_data[0] <= rs232_rx;,即8bit数据采样完毕,此时进入停止状态,重新返回开始状态。检测到由接收模块使能位的下降沿后开启波特率发生器并使能发送,隔半个电平时间后开始发送数据帧每隔“一个”电平时间更新要发的数据位,发送一位结束位后停止工作

2.1.7分频模块设计

串行异步通信的关键在于准确地检测到起始位,因此接收端的时钟必须采用比波特率更高的时钟信号,以便提高采样的分辨率和抗干扰能力,从而更准确地判定起始位。本实验中波特率为9600bit,取波特率因子为1。接收端检测到传输线上电平由高到低的变化后便开始对接收时钟进行计数,当计到8个时钟以后,再次对传输线进行采样,如果仍为低电平,则确认是起始位,而不是干扰信号,之后每隔16个时钟进行一次采样,直到采样到停止位。而且由于每一次采样都是在码元的中心进行的,这样还可以最大限度地避免收、发时钟偏差对数据传送造成的影响。

2.2系统硬件语言描述

2.2.1verilog描述思路

第二部分“系统设计”中对系统的功能和逻辑结构、状态转移以及模块划分都有了详细的叙述,模块间的耦合和信号的传递关系已经清晰。可以使用verilog语言描述硬件电路了。

发送模块和接收模块的verilog语言描述按照事先设计好的状态转移进行编写可以使电路思想明晰化,避免编程过程中用软件的思维去描述硬件的电路系统,也可有效避免系统性的错误。

由于进行了细致的模块划分,模块的间的耦合程度降到了很低,这就使得电路设计的可靠性大为增强,只要模块的输出满足了功能定义,整个系统就能正常工作,即便个别模块出现问题,也不会过多影响到其他模块。实际测试过程中也印证了这一点。

2.2.2总体电路的描述

顶层符号文件描述如下:

图2.8 顶层符号文件

2.2.3分块电路的verilog描述

本节给出分块电路的硬件描述,对关键部分进行了分析。

1、发送模块的描述

`timescale 1ns / 1ps

module my_uart_tx( clk,rst_n,

rx_data,rx_int,rs232_tx,

clk_bps,bps_start,led1

);

input clk;// 50MHz主时钟

input rst_n;//低电平复位信号

input clk_bps;// clk_bps_r高电平为接收数据位的中间采样点,同时也作为发送数据改变点

input[7:0] rx_data;//接收数据寄存器

input rx_int;//接收数据中断信号,接收到数据期间始终为高电平,在该模块中利用它的下降沿来启动串口发送数据

output rs232_tx;// RS232发送数据信号

output bps_start;//接收或者要发送数据,波特率时钟启动信号置位

output led1;

reg rx_int0,rx_int1,rx_int2; //rx_int信号寄存器,捕捉下降沿滤波用wire neg_rx_int; // rx_int下降沿标志位

always @ (posedge clk or negedge rst_n) begin

if(!rst_n) begin

rx_int0 <= 1'b0;

rx_int1 <= 1'b0;

rx_int2 <= 1'b0;

end

else begin

rx_int0 <= rx_int;

rx_int1 <= rx_int0;

rx_int2 <= rx_int1;

end

End

assign neg_rx_int = ~rx_int1 & rx_int2; //捕捉到下降沿后,neg_rx_int拉高保持一个主时钟周期

reg[7:0] tx_data; //待发送数据的寄存器

reg bps_start_r;

reg tx_en; //发送数据使能信号,高有效

reg[3:0] num;

always @ (posedge clk or negedge rst_n) begin

if(!rst_n) begin

bps_start_r <= 1'bz;

tx_en <= 1'b0;

tx_data <= 8'd0;

end

else if(neg_rx_int) begin //接收数据完毕,准备把接收到的数据发回去

bps_start_r <= 1'b1;

tx_data <= rx_data; //把接收到的数据存入发送数据寄存器

tx_en <= 1'b1; //进入发送数据状态中

end

else if(num==4'd11) begin //数据发送完成,复位

bps_start_r <= 1'b0;

tx_en <= 1'b0;

end

end

assign bps_start = bps_start_r;

reg rs232_tx_r;

reg led1_r;

always @ (posedge clk or negedge rst_n) begin

if(!rst_n) begin

num <= 4'd0;

rs232_tx_r <= 1'b1;

led1_r<=1'b0;

end

else if(tx_en) begin

if(clk_bps) begin

led1_r<=1'b1;

case (num)

4'd0: rs232_tx_r <= 1'b0; //发送起始位

4'd1: rs232_tx_r <= tx_data[0]; //发送bit0

4'd2: rs232_tx_r <= tx_data[1]; //发送bit1

4'd3: rs232_tx_r <= tx_data[2]; //发送bit2

4'd4: rs232_tx_r <= tx_data[3]; //发送bit3

4'd5: rs232_tx_r <= tx_data[4]; //发送bit4

4'd6: rs232_tx_r <= tx_data[5]; //发送bit5

4'd7: rs232_tx_r <= tx_data[6]; //发送bit6

4'd8: rs232_tx_r <= tx_data[7]; //发送bit7

4'd9: rs232_tx_r <= 1'b1; //发送结束位

default: rs232_tx_r <= 1'b1;

endcase

num <= num+1'b1;

end

else if(num==4'd11)

begin

num <= 4'd0; //复位

led1_r<=1'b0;

end

end

end

assign rs232_tx = rs232_tx_r;

assign led1=led1_r;

endmodule

2、接收模块的描述

`timescale 1ns / 1ps

module my_uart_rx(clk,rst_n,

rs232_rx,rx_data,rx_int,

clk_bps,bps_start,led0);

input clk; // 50MHz主时钟

input rst_n; //低电平复位信号

input rs232_rx; // RS232接收数据信号

input clk_bps; // clk_bps的高电平为接收或者发送数据位的中间采样点output bps_start; //接收到数据后,波特率时钟启动信号置位

output[7:0] rx_data; //接收数据寄存器,保存直至下一个数据来到

output rx_int; //接收数据中断信号,接收到数据期间始终为高电平

output led0;

reg rs232_rx0,rs232_rx1,rs232_rx2,rs232_rx3; //接收数据寄存器,滤波用wire neg_rs232_rx; //表示数据线接收到下降沿

always @ (posedge clk or negedge rst_n) begin

if(!rst_n) begin

rs232_rx0 <= 1'b0;

rs232_rx1 <= 1'b0;

rs232_rx2 <= 1'b0;

rs232_rx3 <= 1'b0;

end

else begin

rs232_rx0 <= rs232_rx;

rs232_rx1 <= rs232_rx0;

rs232_rx2 <= rs232_rx1;

rs232_rx3 <= rs232_rx2;

end

end

assign neg_rs232_rx = rs232_rx3 & rs232_rx2 & ~rs232_rx1 & ~rs232_rx0; //接收到下降沿后neg_rs232_rx置高一个时钟周期

reg bps_start_r;

reg[3:0] num; //移位次数

reg rx_int; //接收数据中断信号,接收到数据期间始终为高电平

always @ (posedge clk or negedge rst_n)

if(!rst_n) begin

bps_start_r <= 1'bz;

rx_int <= 1'b0;

end

else if(neg_rs232_rx) begin //接收到串口接收线rs232_rx的下降沿标志信号

bps_start_r <= 1'b1; //启动串口准备数据接收

rx_int <= 1'b1; //接收数据中断信号使能end

else if(num==4'd12) begin //接收完有用数据信息

bps_start_r <= 1'b0; //数据接收完毕,释放波特率启动信号

rx_int <= 1'b0; //接收数据中断信号关闭end

assign bps_start = bps_start_r;

reg[7:0] rx_data_r; //串口接收数据寄存器,保存直至下一个数据来到reg led0_r;

reg[7:0] rx_temp_data; //当前接收数据寄存器

always @ (posedge clk or negedge rst_n)

if(!rst_n) begin

rx_temp_data <= 8'd0;

num <= 4'd0;

rx_data_r <= 8'd0;

led0_r<=1'b0;

end

else if(rx_int) begin //接收数据处理

led0_r<=1'b1;

if(clk_bps) begin //读取并保存数据,接收数据为一个起始位,8bit 数据,1或2个结束位

case (num)

4'd1: rx_temp_data[0] <= rs232_rx; //锁存第0bit

4'd2: rx_temp_data[1] <= rs232_rx; //锁存第1bit

4'd3: rx_temp_data[2] <= rs232_rx; //锁存第2bit

4'd4: rx_temp_data[3] <= rs232_rx; //锁存第3bit

4'd5: rx_temp_data[4] <= rs232_rx; //锁存第4bit

4'd6: rx_temp_data[5] <= rs232_rx; //锁存第5bit

4'd7: rx_temp_data[6] <= rs232_rx; //锁存第6bit

4'd8: rx_temp_data[7] <= rs232_rx; //锁存第7bit

default: ;

endcase

num <= num+1'b1;

end

else if(num == 4'd12) begin //我们的标准接收模式下只有1+8+1(2)=11bit的有效数据

num <= 4'd0; //接收到STOP位后结束,num清零rx_data_r <= rx_temp_data; //把数据锁存到数据寄存器rx_data中

led0_r<=1'b0;

end

end

assign rx_data = rx_data_r;

assign led0=led0_r;

endmodule

3、分频模块的描述

module speed_select(clk,rst_n,

bps_start,clk_bps);

input clk; // // 50MHz主时钟

input rst_n; //低电平复位信号

input bps_start; ////接收到数据后,波特率时钟启动信号置位

output clk_bps; // clk_bps的高电平为接收或者发送数据位的中间采样点

`define BPS_PARA 5207 //波特率9600分频点数

`define BPS_PARA_2 2603

reg[12:0] cnt;

reg clk_bps_r;

reg[2:0] uart_ctrl; // uart????????

always @ (posedge clk or negedge rst_n)

begin

if(!rst_n) cnt <= 13'd0;

else if((cnt == `BPS_PARA) || !bps_start) cnt <= 13'd0; //clear else cnt <= cnt+1'b1; end

always @ (posedge clk or negedge rst_n)

begin

if(!rst_n) clk_bps_r <= 1'b0;

else if(cnt == `BPS_PARA_2) clk_bps_r <= 1'b1;

else clk_bps_r <= 1'b0;

end

assign clk_bps = clk_bps_r;

endmodule

2.3系统仿真验证

系统仿真分为两个步骤进行,首先是关键模块的仿真,验证子系统功能的正确性,然后是综合仿真,验证整个系统的功能。仿真环境是QuartusII 7.2。

首先是分频模块的仿真。由仿真结果可看出bclk的时钟周期为104us,与要求结果一致,频率为9600Hz。

图2.9 分频模块仿真图(9600Hz分频)

然后是发送模块的仿真波形。下图为发送模块第一个字符发送的波形,第一个字符的数值为“01100110”,发送时低位先发送,因此仿真波形由时间的先后顺序,其

序列应为“01100110”,每一帧数据为10个bit,第一个bit为起始位,最后一个bit 为停止位,可以看出,中间的八位为“01100110”,说明了仿真波形的正确性。

图2.10 发送模块仿真图

下图为接收模块仿真图。设定的输入信号为“10010110”。接收时将先接收到的数据作为低位,后接收到的数据作为高位,因此转化成的并行数据应为“01101001”,因此仿真波形正确。

图2.11 接收模块仿真图

第三部分结果与分析

3.1实现功能说明

本实验完成的RS232串口通信控制器,完成了课题要求的所有功能。由于顶层设计采用了子系统分模块描述的方法,使得控制器具有很好的扩展性。可以在不改变系统框架和模块间电路连接关系,增加其他模块,实现其他功能。

本课题中并没有在数据帧中加入校验位,仅仅实现了1位起始位,1位停止位和8位数据位的传输。初步实现了PC和FPGA之间的通信。

数字系统的设计,真正的重点在于把系统层面的设计做好,把系统状态机设计完整,系统架构清晰,层次明确,稳定性好,可扩展和可移植性好,这样的系统给到用户,只要添加用户模块或者稍作修改即可完成非特定的功能。

3.2器件资源分析

在设计阶段,对系统描述采用过多种方式,尝试了多种描述,代码的长度在增加,模块在增多,但系统稳定性和可扩展性也在增强,层次结构和模块设计也更加完善。

设计之初对资源使用没有多少概念,时常以软件的思想描述硬件,在描述中使用乘法等资源耗费严重的操作,也曾使用过嵌套多层的IF-ELSE语句,产生很长的选择器,降低了模块的可靠性,增加处理延时。随着设计的深入,加上反复求精的过程磨练,逐步对硬件描述综合出的实际电路形式有了更多的理解,对延时和资源占用有了初步概念。一个显见的结论是描述代码的长度和综合后的电路形式与资源占用无必然联系。需要关注编译器在综合时如何将verilog行为级描述转化为结构化的门级电路,才能分析清楚资源占用率和电路结构。行为级描述可能与实际综合的电路产生不一致,需要谨慎对待。

图3.1是QuartusII编译工程后的综合报告。逻辑单元占用率27%。

图3.1 QuartusII编译综合报告

3.3故障和问题分析

实验中由于仔细设计了详细划分了子模块、各模块的实现都仔细进行了描述,故没有出现太多的故障。

由于以前对verilog语言的理解停留在很低的层次,甚至和C语言等软件语言混为一谈,没有很好地理解状态机、硬件并发性、数字系统设计的方法,主要的麻烦产

生在verilog描述上。在查阅了诸多相关资料后对verilog的语法基本熟悉,从最初的类似C语言的风格到模块初步成型、状态机引入,再到最后全模块化,自顶向下设计系统,完成verilog描述。最深的感受在于,开始时一心专注于代码的编写和语法的使用,忽视了系统设计,导致设计结果不令人满意,后来逐步采用自顶向下的设计思路,先从逻辑上把系统的功能和子系统的划分描述清楚,然后设计各个模块的接口和定义,最后分别去描述底层各个模块的功能和实现,清晰明了,一气呵成。这也是系统没有多少故障的主要原因。

verilog描述中解决的最成功的一个问题是Multi-drive错误的处理。采用了中间寄存器存储各个信号,然后利用选择器进行选择,就避免了多驱动的问题。

第四部分总结与结论

4.1实验结论

本实验历时四周,分为选定题目、系统设计、verilog描述、成果验收四个步骤。RS232串口通信控制器的设计成果完成了基本实验要求,实现串口的基本通信功能。

系统采用了自顶向下的设计思路,详细分析了系统功能,划分了3个模块分别实现子系统各部分的功能。在设计中采用顶层模块调用底层模块的设计方法。报告中给出了系统设计的四个步骤的详细情况,给出了系统的仿真和分析,附录了完整硬件描述代码和电路图。

4.2总结体会

通过基于FPGA的RS232串口通信的设计、制作、调试等实验,非常锻炼我的动手能力。首先是对Quartus软件的认识相较以前用起来更顺利了,不管是编译还是波形仿真,其中的内涵都能基本的了解。

其次就是verilog硬件描述语言这方面也得到了显著的提高,从不懂得看程序到能学会修改程序。例如verilog的两个误区:使用reg 类型还是net类型,reg类型只是在过程模块中被赋值;而net类型则是在过程快外面被赋值或者驱动。同时也能明白每一个always模块之间是并行的关系,是同步的,同时不能在两个或者多个always模块中给同一个输出变量赋值。

接着就将每个模块程序写好之后,就会进行编译和波形仿真。在为做这次设计之前,我连最基本的波形仿真都不知道如何给输入变量赋初始值。经过不断的努力,我能看懂程序,也能把输入变量设置好初始值。

最后就是FPGA板子的烧入了,首先要学会看板子的原理图,接着就是学会分配管脚。通过这次试验收获颇深。

第五部分元器件清单

5.1元器件和仪表清单

名称数量作用

FPGA实验板cycloneII EP2C8Q208C8 1

下载测试RS232串口通信

控制器

台式电脑 1 在QuartusII7.2软件环境中编写verilog描述代码,进行仿真验证和分析

9针串口数据线 1 实现PC和fpga的通信

谢辞

感谢我的课程设计老师分配给我一个如此重要且非常具有意义的任务,在老师的耐心辅导和帮助下,我才能出色的完成此次任务。在编写代码的过程中,我的同学给予了无限的帮助,和我共同进退,我在这里也特别要感谢他们。同时,谢谢我的学校——桂林电子科技大学给我们提供了各种实验仪器,使我们能把任务顺利完成。最后,我在这里由衷的感谢帮助过我的老师和同学们,万分感谢,你们辛苦了!

基于FPGA的多功能数据选择器设计与实现

基于FPGA的多功能数据选择器设计与实现 章军海201022020671 [摘要]传统的数字系统设计采用搭积木式的方法来进行设计,缺乏设计的灵活性。随着可编程逻辑器件(PLD)的出现,传统设计的缺点得以弥补,基于PLD的数字系统设计具有很好的灵活性,便于电路系统的修改与调试。本文采用自顶向下的层次化设计思想,基于FPGA设计了一种多功能数据选择器,实现了逻辑单元可编程、I/O单元可编程和连线可编程功能,并给出了本设计各个层次的原理图和仿真时序图;本文还基于一定的假设,对本设计的速度和资源占用的性能进行了优化。 [关键词]层次化设计;EDA;自顶向下;最大时延 0引言: 在现代数字系统的设计中,EDA(电子设计自动化)技术已经成为一种普遍的工具。基于EDA技术的设计中,通常有两种设计思想,一种是自顶向下的设计思想,一种是自底向上的设计思想[1]。其中,自顶向下的设计采用层次化设计思想,更加符合人们的思维习惯,也容易使设计者对复杂系统进行合理的划分与不断的优化,因此是目前设计思想的主流。基于层次化设计思想,实现逻辑单元、I/O单元和连线可编程可以提高资源的利用效率,并且可以简化数字系统的调试过程,便于复杂数字系统的设计[2][3]。 1系统原理图构架设计 1.1系统整体设计原理 本设计用于实现数据选择器和数据分配器及其复用的I/O端口和连线的可编程却换,提高系统的资源利用效率。系统顶层原理框图如图1所示,系统拥有两个地址选择端口a0、a1,一个功能选择端口ctr,还有五路I/O复用端口。其中,地址选择端口用于决定数据选择器的数据输入端和数据分配器的数据输出端;功能选择端口用于切换数据选择器和数据分配器,以及相应的I/O端口和连线;I/O复用端口数据的输入和输出,其功能表如表一所示。 图1顶层模块原理图 表一顶层系统功能表

基于FPGA的脉冲发生器的设计

【基础?应用】 基于FP GA 的脉冲发生器的设计 ① 张 涛 (北方交通大学电子信息工程学院,北京100044)【摘 要】 以脉冲发生器为研究对象,介绍了脉冲发生器的基本原理、硬件构成和实现方法,阐述了一种基于DSP -FP G A 数字系统的PWM 控制脉冲生成方法,并给出了仿真及实测实验结果。 【关键词】 脉宽调制;脉冲发生器;可编程门阵列 1 FP G A 简介 FP G A (Field Programmable G ate Array ,可编程门阵列)是美国Xinlinx 公司推出的一种采用单元型结构的新型PLD 器件。它采用CMOS 、SRAM 工艺制作,在结构上与阵列型PLD 不同,它的内部由许多独立的可编程逻辑单元构成,各逻辑单元之间可以灵活地相互连接,具有密度高、速度快、编程灵活和可重新配置等诸多优点。FP G A 已成为当前主流的PLD 器件之一。 1.1 PLD 的主要特点 (1)缩短研制周期。 (2)降低设计成本。用PLD 来设计和改造电子产品可以大幅度地减少印制板的面积和接插件,降低装配和调试费用。 (3)提高设计灵活性和可靠性。大量分立式元器件在向印制板上装配时,往往会发生由于虚焊或接触率近似于线性增加,且线性斜率较小;肝脏中大小不同的散射源对不同频率的声波存在有不同的散射效应。 由于肝脏组织结构的非均匀性、复杂性及其各部分散射相关长度分布的不一致性,其散射谱随深度增加而衰减变化,并非完全呈线性关系,而呈现较复杂的关系变化。 ⑵肝叶边缘部分及表层区域,其结构散射近似呈瑞利散射特征;肝叶表层以下与肝叶中心之间的中间区域,其结构散射呈随机散射特征;肝叶中心区域,其结构散射呈扩散漫射特征,也有较强的反射。 ⑶利用区域结构散射特征谱,不仅可对各特征区域组织微结构作出粗略估计,而且可通过区域散射谱特征的变化,对生物软组织的生理病理变化的判断提供依据。 综上所述,利用超声散射谱分析,可为B 超的形态学图像信息诊断提供一个组织特征的信息,在临床上是有应用前景的。 参考文献 [1]Luigi Landini et al.IEEE Trans on U FFC.1990,37(5):448-456 [2]陈启敏等.声学学报.1995,Vol.21,No.4:692-699 [3]E.J.Feleppa ,et al.IEEE Annual International Conference ,EMB ,1990;12(1):337 (责任编辑:常 平) 2003年4月第19卷第2期 武警工程学院学报JOURNAL OF EN GG COLL EGE OF ARMED POL ICE FORCE Apr.2003Vol.19No.2 ①收稿日期:2002-12-06作者简介:张涛(1968.07-),1994年毕业于西安交通大学工业电器自动化专业,现在北方交通大学电子信息工程学院电子与信息工程专业攻读硕士学位。

基于FPGA的模拟IIC接口设计与实现

研究生课程论文 课程名称基于FPGA的模拟IIC接口设计与实现授课学期2012 学年至2013 学年第一学期学院电子工程学院 专业电子与通信工程 学号2012011603 姓名 任课教师 交稿日期2013.01.10 成绩 阅读教师签名 日期 广西师范大学研究生学院制

基于FPGA的模拟I2C接口设计与实现 摘要:本文论述了I2C总线的基本协议,以及基于FPGA 的模拟I2C 总线接口模块的设计,在QuartusII软件中用Verilog HDL语言编写了部分I2C总线接口功能的程序代码,生成原理图模块。并连接好各个模块,进行了时序仿真。最后,下载到FPGA的板运行测试。 关键词:I2C 接口FPGA Verilog 1课题研究意义、现状及应用分析 目前市场上主流的嵌入式设备主要是微处理器、DSP等,但FPGA 以其独有的高抗干扰性、高安全性正在逐步取得开发公司的青睐,在FPGA上开发I2C势在必行。并且利用EDA 工具设计芯片实现系统的功能,已经成为支撑电子设计的通用平台,并逐步向支持系统级的设计方向发展。模块化的设计思想在软件设计过程中越来越被重视。I2C总线是Philips 公司推出的双向两线串行通讯标准,具有接口线少、通讯效率高等特点。因此,基于FPGA的I2C总线设计有着广泛的应用前景。

2课题总体方案设计及功能模块介绍 本设计主要分三大模块,分别是I2C 总线接口模块、按键输入控制模块、数码管显示模块。I2C总线模块集成了I2C协议用于和总线相接EEPROM的通信;按键输入控制模块用于控制I2C模块的页读、页写、字节读、字节写功能;数码管显示模块用于显示通过I2C总线读取EEPROM中的数据。 3I2C接口设计原理 I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10 Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。 3.1总线的构成 I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都

基于fpga的eeprom设计

二线制I2C CMOS 串行EEPROM 的FPGA设计 姓名:钱大成 学号:080230114 院系:物理院电子系 2011年1月1日

一、课程设计摘要: (1)背景知识: A、基本介绍: 二线制I2C CMOS 串行EEPROM AT24C02/4/8/16 是一种采用CMOS 工艺制成的串行可用电擦除可编程只读存储器。 B、I2C (Inter Integrated Circuit)总线特征介绍: I2C 双向二线制串行总线协议定义如下: 只有在总线处于“非忙”状态时,数据传输才能被初始化。在数据传输期间,只要时钟线为高电平,数据线都必须保持稳定,否则数据线上的任何变化都被当作“启动”或“停止”信号。图1 是被定义的总线状态。· ①总线非忙状态(A 段) 数据线SDA 和时钟线 SCL 都保持高电平。 ②启动数据传输(B 段) 当时钟线(SCL)为高电平状态时,数据线(SDA)由高电平变为低电平的下降沿被认为是“启动”信号。只有出现“启动”信号后,其它的命令才有效。

③停止数据传输(C 段) 当时钟线(SCL)为高电平状态时,数据线(SDA)由低电平变为高电平的上升沿被认为是“停止”信号。随着“停在”信号出现,所有的外部操作都结束。 ④数据有效(D 段) 在出现“启动”信号以后,在时钟线(SCL)为高电平状态时数据线是稳定的,这时数据线的状态就要传送的数据。数据线(SDA)上的数据的改变必须在时钟线为低电平期间完成,每位数据占用一个时钟脉冲。每个数传输都是由“启动”信号开始,结束于“停止”信号。 ⑤应答信号 每个正在接收数据的EEPROM 在接到一个字节的数据后,通常需要发出一个应答信号。而每个正在发送数据的EEPROM 在发出一个字节的数据后,通常需要接收一个应答信号。EEPROM 读写控制器必须产生一个与这个应答位相联系的额外的时钟脉冲。在EEPROM 的读操作中,EEPROM 读写控制器对EEPROM 完成的最后一个字节不产生应答位,但是应该给EEPROM 一个结束信号。 C、3. 二线制I2C CMOS 串行EEPROM读写操作 ① EEPROM 的写操作(字节编程方式) 所谓EEPROM 的写操作(字节编程方式)就是通过读写控制器把一个字节数据发送到EEPROM 中指定地址的存储单元。其过程如下:EEPROM 读写控制器发出“启动”信号后,紧跟着送4 位I2C 总线器件特征编码1010 和3 位EEPROM 芯片地址/页地址XXX 以及写状态的R/W 位(=0),到总线上。这一字节表示在接收到被寻址的EEPROM 产生的一个应答位后,读写控制器将跟着发

基于FPGA芯片的最小系统设计

黑龙江大学本科生 毕业论文(设计)档案编码: 学院:电子工程学院 专业:电子信息工程 年级:2007 学生姓名:王国凯 毕业论文题目:基于FPGA 的电梯自动控制 系统设计

摘要 本文在介绍了在当前国内外信息技术高速发展的今天,电子系统数字化已成为有目共睹的趋势。从传统的应用中小规模芯片构成电路系统到广泛地应用单片机,直至今天FPGA 在系统设计中的应用,电子设计技术已迈人了一个全新的阶段。FPGA 利用它的现场可编程特性,将原来的电路板级产品集成为芯片级产品,缩小体积,缩短系统研制周期,方便系统升级,具有容量大、逻辑功能强,提高系统的稳定性,而且兼有高速、高可靠性。越来越多的电子设计人员使用芯片进行电子系统的设计,通过基于FPGA 电梯系统开发设计,说明了FAPG 芯片研究的动机和研究意义。 关键词 FPGA;电梯系统;FLEX10K;JTAG;模块设计

Ab s t ract This paper introduces the rapid development of information technology around the world today. Digitalized electronic systems have become the trend. From the traditional application of small and medium-chip circuitry to Microcontroller and FPGA application in system design, electronic design technology is stepping into a new field. By using its field programmable features, FPGA changes the original circuit board-level products to the chip-level integration products. Now FPGA has advantages of reduced the size, shorten development cycle, facilitated in system upgrades, highly capacity, strong logic functions, stable system and high speed. More and more electronic designers use FPGA to design electronic systems. This paper shows the motivation and significance of designing by FPGA through the elevator FPGA system design. Ke ywo r d FPGA; Mini-System; FLEX10K; JTAG;Module design

FPGA设计方案

FPGA课程设计 题目:全天候温度纪录仪的设计与FPGA实现 姓名: 学号: 院系:信息科学与工程学院 专业:计算机技术

摘要 本设计有效的克服了传统的数字温度计的缺点,采用自上而下的设计思路,绘制出了系统结构流程图,最后又在硬件上通过对其进行调试和验证。基于FPGA在Quartus II13.0软件下应用Verilog HDL语言编写程序,采用ALTRA公司Cyclone- IV系列的EP4CE40F23I7 芯片进行了计算机仿真,并给出了相应的仿真结果。该电路能够实现很好的测温功能。 关键字:数字温度计;FPGA;Quartus II130.;Verilog HDL;EP4CE40F2317 Abstract This design effectively overcomes the traditional digital thermometer’s wea knesses and takes a top-down approach to design flow chart of system, and fi nally pass the circuits to the hardware to debug and verify it. This design is b ased on FPGA using Verilog HDL language to write program in Quartus II sof tware, adopting EP4CE40F23I7 chip of Cyclone- IV series of ALTRA company for computer simulation and at the same time showing the corresponding sim ulation result. This circuit is able to carry out excellent temperature- measurem ent function. KeyWords:Digital thermometer;FPGA;Quartus II 13.0;Verilog HDL ;EP4CE40F2317

基于FPGA的简易的ALU设计

本科毕业设计开题报告 题目:基于FPGA的简易的ALU设计 院(系): 班级: 姓名: 学号: 指导教师: 教师职称:讲师

xxxxx学院本科毕业设计开题报告 题目基于FPGA的简易ALU设计来源工程实际 1、研究目的和意义 从20 世纪中叶的无线电时代,到21 世纪以计算机技术为中心的智能化加信息化的现代电子时代,电子系统发生了巨大的变化。现代电子系统愈发庞大和复杂,很多应用要求能够在现场进行实时的高速运算,并对系统进行有效地控制。作为这一需求的解决方案,嵌入式计算机应用系统已成为现代电子系统的核心技术。 早期的嵌入式系统是将通用计算机经改装后嵌入到被测控对象去,实现数据采集、分析处理、状态显示、输出控制等功能。随着大规模集成电路技术的发展,中央处理器CPU、随机存取存储器RAM、只读存储器ROM、输入/输出端口I/O等主要的计算机功能部件可以集成在一块集成电路芯片上,这颗芯片就被称为单片机。与改装普通计算机相比,单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用广泛、通用性强等突出优点,因此迅速成为最普及的嵌入式应用系统方案。 通常,我们要实现一些功能可以用单片机来完成,但是,用可编程逻辑FPGA同样可以实现。在计算机中,算术逻辑单元(ALU)是专门执行算术和逻辑运算的数字电路。ALU是计算机中央处理器的最重要组成部分,甚至连最小的微处理器也包含ALU作计数功能。此次我要完成的设计是基于FPGA的四位ALU算数逻辑单元设计。通过对ALU功能的拓展,来实现更快更好的运算功能,相信这一功能的实现将使运算功能更加简单、快捷、准确,从而提高我们今后的学习工作效率。 2、发展情况(文献综述) 算术逻辑单元(arithmetic logic unit,缩写ALU)是进行整数运算的结构。现阶段是用电路来实现,应用在电脑芯片中。 在计算机中,算术逻辑单元(ALU)是专门执行算术和逻辑运算的数字电路。ALU是计算机中央处理器的最重要组成部分,甚至连最小的微处理器也包含ALU作计数功能。在现代CPU和GPU处理器中已含有功能强大和复杂的ALU;一个单一元件也可能含有ALU。 1945年数学家冯诺伊曼在一篇介绍被称为EDV AC的一种新型电脑的基础构成的报告中提出ALU的概念。 早期发展:1946年,冯诺伊曼与同事合作为普林斯顿高等学习学院(IAS)设计计算机。随后IAS计算机成为后来计算机的原形。在论文中,冯诺伊曼提出他相信计算机中所需的部件,其中包括ALU。冯诺伊曼写到,ALU是计算机的必备组成部分,因为已确定计算机一定要完成基本的数学运算,包括加减乘除。于是他相信计算机应该含有专门完成此类运算的部件。 ①数字系统 ALU必须使用与数字电路其他部分使用同样的格式进行数字处理。对现代处理器而言,几乎全都使用二进制补码表示方式。早期的计算机曾使用过很多种数字系统,包括反码、符号数值码,甚至是十进制码,每一位用十个管子。以上这每一种数字系统所对应的ALU都有不同的设计,而这也影响了当前对二进制补码的优先选择,因为二进制补码能简化ALU加法和减法的运算。 ②可行性分析 绝大部分计算机指令都是由ALU执行的。ALU从寄存器中取出数据,数据经过处理将运算结果存入ALU输出寄存器中。其他部件负责在寄存器与内存间传送数据,控制单元控制着ALU,通过控制电路来告诉ALU该执行什么操作。 ③简单运算 大部分ALU都可以完成以下运算∶整数算术运算(加、减,有时还包括乘和除,不过成本

基于FPGA的嵌入式监控系统设计

基于FPGA的嵌入式监控系统设计 来源:无线测温.testeck. 目前,图像监控系统大多采用PC和视频采集卡作为系统主要部分,基于嵌入式技术的图像监控系统设备在我国还只是起步阶段,没有成熟的产品应用。这一现状的根本原因就是我国在开发这类产品时,没有统一的开发标准和共用的开发平台,而且没有可靠的功能和性能测试标准,各个企业的开发技术力量分散,极大的影响了该类产品开发的效率和可靠性。而制造出来的产品同国外同类产品相比,功能相差太大,没有竞争力,市场基本上被国外公司所占领。因此,开发一个该类嵌入式系统势在必行。 系统总体方案 为了实现自动图像报警和图像采集,本文设计了动体检测算法,这是因为绝大多数情况下我们只对监控区域中运动的物体感兴趣,这样可以过滤掉只包含静态背景的图像,从而降低了对有限的嵌入式硬件资源的消耗。由于活动物体大多是人,而且这也是图像监控的目标,为此加入了人体信号探测器,用以辅助动体检测,以达到降低图像报警误报率的目的。本系统主要集成了图像采集、控制和存储等器件或芯片,组成了以FPGA为控制核心的实时图像监控系统。系统

的总体方案如图1所示。 图1 图像监控系统结构图 系统工作流程为:系统上电后,FPGA从外部EEPROM自动加载程序,I2C模块对CIS进行初始化工作参数配置。CIS 向FPGA输入图像数据信号,FPGA将采集的原始数据(RAW)转换成RGB格式,帧缓冲模块(Frame Buffer)每次将相邻两帧图像数据写入SDRAM,然后比较这两帧图像的差值,如果差值大于设定的阈值,并且人体探测器输出高电平,就认为检测到了外界场景的运动,系统会自动将捕获的图像输出到SD卡进行存储。图2给出了系统的工作流程。 图2 系统工作流程图 图3 电源电路原理图 系统硬件设计与实现 图像监控系统处理的数据量较大,同时还要满足实时性要

基于FPGA的SPWM设计方案

基于FPGA的SPWM设计方案 第1章绪论 1.1 SPWM介绍 PWM的全称是Pulse Width Modulation(脉冲宽度调制)。,它是通过改变输出方波的占空比来改变等效的输出电压。广泛地用于电动机调速和阀门控制,比如电动车电机调速就是使用这种方式 SPWM,即正弦脉冲宽度调制(Sinusoidal Pulse Width Modulation),就是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规律排列,用SPWM波形控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值,这样输出波形经过适当的滤波可以做到正弦波输出。它广泛地用于直流交流逆变器等. 1.2 SPWM原理实现方案 1.2.1 等面积法 该方案实际上就是SPWM法原理的直接阐释,用同样数量的等幅而不等宽的矩形脉冲序列代替正弦波,然后计算各脉冲的宽度和间隔,并把这些数据存于微机中,通过查表的方式生成PWM信号控制开关器件的通断,以达到预期的目的.由于此方法是以SPWM控制的基本原理为出发点,可以准确地计算出各开关器件的通断时刻,其所得的的波形很接近正弦波,但其存在计算繁琐,数据占用内存大,不能实时控制的缺点. 1.2.2 硬件调制法 硬件调制法是为解决等面积法计算繁琐的缺点而提出的,其原理就是把所希望的波形作为调制信号,把接受调制的信号作为载波,通过对载波的调制得到所期望的PWM波形。通常采用等腰三角波作为载波,当调制信号波为正弦波时,所得到的就是SPWM波形。其实方法简单,可以用模拟电路构成三角波载波和正弦

基于FPGA的简单VGA显示控制器设计开题报告

开题报告的内容 一、本课题国内外状况,说明选题依据和意义 现在社会,以计算机技术为核心的信息技术迅速发展,以及信息的爆炸式增长,人类获得视觉信息的很大一部分是从各种各样的电子显示器件上获得的,对这些电子显示器件的要求也越来越高,在这些诸多因素的驱动下,显示技术也取得了飞速的发展。VGA(Video Graphics Array)是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。使用FPGA设计的VGA 显示控制器具有很高的灵活性,可以根据其不同的类型、尺寸、适用场合特别是不同的工业产品,做一些特殊的设计,以最小的代价满足系统的要求,而且可以解决通用的显示控制器本身固有的一些缺点。 VGA接口是与显示器进行通信的唯一接口,通过FPGA器件控制RGB信号、行同步信号、场同步信号等信号,并参照有关标准,最后可以实现对VGA显示器的控制。VGA 图像控制器是一个较大的数字系统,传统放入图像显示方法是将图像数据传回电脑并通过显示器显示出来,在传输的过程中就需要CPU不断地对图像数据信号进行控制,这样就造成了CPU资源的浪费,同时系统还需要依赖电脑,因而降低了系统的灵活性。利用FPGA 芯片和EDA设计方法,可以根据用户的需要,设计出针对性强的VGA显示控制器,而且不需要依靠计算机,既能够大大降低成本,又可以满足生产实践中不断变化的需要,同时产品的升级换代也方便迅速。 基于这种目的,本设计采用了Altera公司的EDA软件Quartus II进行设计。 二、研究的基本内容、基本思路(方案)及解决的主要问题 2.1设计的主要内容 此设计要求实现某一分辨率下(如640*480@60Hz)的VGA显示驱动,能简单显示彩条、图像等。 1.熟悉FPGA芯片资料(如Cyclone系列)、集成开发环境Altera Quartus II、仿真软件ModelSim等设计相关工具、器件。 2.熟悉VGA工作原理及VGA接口协议、工作时序。 3.计算出合适的时序,并对原始时钟进行分频处理以获取符合时序要求的各频率。 4.须要显示的图像等可存储于外部存储器,运行时,从外部存储器读取显示数据。

相关文档