EDA课程设计报告

发布 2022-09-30 21:30:28 阅读 1322

eda课程设计报告题目1串口通信姓名学号班级组员串口通信

一、 设计要求设计一个全双工串口收发控制程序,速率为1200b/s、9600b/s、19200b/s可选,其中数据帧格式为1位起始位8位数据1位奇偶校验位1位停止位。

二、 系统组成 fpga uart由3个子模块组成波特率发生器; 接收模块; 发送模块。

方框图如图1 所示。

波特率发生器比较接收模块发送模块图 1 uart 模块组成

三、 模块设计 1. 顶层模块异步收发器的顶层模块由波特率发生器、uart接收和 uart发送器构成。

uart 发送器的用途是将准备输出的并行数据按照基本 uart 帧格式转为 txd 信号串行输出。

uart接收器接收 rxd 串行信号, 并将其转化为并行数据。

波特率发生器就是专门产生一个远远高于波特率的本地时钟信号对输入 rxd 不断采样, 使接收器与发送器保持同步。

电路图如图2所示。

2.波特率发生器波特率发生器实际上就是一个分频器。

可以根据给定的系统时钟频率晶振时钟和要求的波特率算出波特率分频因子, 算出的波特率分频因子作为分频器的分频数波特率分频因子可以根据不同的应用需要更改。

本设计有三档,通sel[1..0]端口选择,模式一为1200b/s,模式二9600b/s,为模式三为19200b/s。

3.uart接收器由于串行数据帧和接收时钟是异步的, 由逻辑 1 转为逻辑0 可以被视为一个数据帧的起始位。

然而, 为了避免毛刺影响, 能够得到正确的起始位信号, 必须要求接收到的起始位在波特率时钟采样的过程中至少有一半都是属于逻辑0 才可认定接收到的是起始位。

由于内部采样时钟bclk 周期由波特率发生器产生是发送或接收波特率时钟频率的16 倍, 所以起始位需要至少 8 个连续 bclk 周期的逻辑0 被接收到, 才认为起始位接收到, 接着数据位和奇偶校验位将每隔16 个 bclk 周期被采样一次即每一个波特率时钟被采样一次 。

如果起始位的确是16 个 bclk 周期长, 那么接下来的数据将在每个位的中点处被采样。

uart接收器的接收状态机如图3所示。

r_start r_stop r_center r_sample r_wait rxd_sync0 rxd_sync1 count”0100”and rxd_sync”0” count“1110“ and rcnt“1011 count”1110”and rcnt≠”1010” 图3 uart接收器的接收状态机 uart接收器的状态机一共有5 个状态 1 r_start等待起始位状态当 uart接收器复位后, 接收状态机将处于这一个状态。

在此状态, 状态机一直在等待 rxd的电平跳转, 从逻辑1 变为逻辑0 , 即起始位, 这意味着新的一帧 uart 数据帧的开始, 一旦起始位被确定, 状态机将转入 r_center状态。

图 3 中的rxd_ sync信号是 rxd 的同步信号, 因为在进行逻辑1或逻辑0 判断时, 不希望检测的信号是不稳定的, 所以不直接检测 rxd信号, 而是检测经过同步后的 rxd_ sync信号。

2 r_center求中点状态对于异步串行信号,为了使每一次都检测到正确的位信号, 而且在较后的数据位检测时累计误差较小, 显然在每位的中点检测是最为理想的。

在本状态, 就是由起始位求出每位的中点, 通过对bclk 的个数进行计数 count , 但计数值不是想当然的“1000” ,要考虑经过一个状态, 也即经过了一个 bclk周期, 所希望得到的是在采样时 1/ 2 位。

另外, 可能在r_start状态检测到的起始位不是真正的起始位, 可能是一个偶然出现的干扰尖脉冲负脉冲 。

这种干扰脉冲的周期是很短的, 所以可以认为保持逻辑0 超过1/ 4 个位时间的信号一定是起始位。

3 r_wait等待采样状态当状态机处于这一状态, 等待计满15 个bclk , 在第16 个bclk 是进入r_sample状态进行数据位的采样检测, 同时也判断是否采集的数据位长度已达到数据帧的长度, 如果到来, 就说明停止位来临了。

数据帧的长度在设计时是可更改的, 在本设计中默认为9 , 即对应的uart工作在8 位数据位和校验位格式。

4 r_sample采样状态即数据位采样检测, 完成后无条件状态机转入 r_wait状态, 等待下次数据位的到来。

5 r_stop状态停止位接收无论停止位是1 位还是1.5 位, 或是2 位, 状态机在r_stop不具体检测rxd ,只是输出帧接收完毕信号 rec_ done --rb1200 baud if div_clk624 then div_clk0; bclkreg --rb9600 baud if div_clk77 then div_clk0; bclkreg --rb19200 baud if div_clk38 then div_clk0; bclkreg if div_clk77 then div_clk0; bclkreg --x_idle 状态,等待发送命令 if xmit_cmd_p 1 then txd_done --x_start 状态,发出起始位,发送周期为机器周期的16倍 if xcnt16“01111“ then state --wait state if xcnt16“01110“then --14 clock 后 ,状态转向x_shift状态 if xbitcnt“1001“ then txd_done --一位一位的发送数据位(8个数据位1个偶校验位) txd --发送停止位,持续16个时钟周期 if xcnt16“01111“ then if xmit_cmd_p 0 then statestate --等待起始位到来来 if rxd_sync 0 then state if rxd_sync 0 then if count“1000“then state if count“1110“then if rcnt“1011“ then --判断是否接收完一帧的数据 state rbufs rbufs9 downto 0 --读入一位数据 rcntrcnt 1 ;state xparitystater_start; end case; end if; end process; end; (2) 程序**

五、 课程设计感受为期两周的课设已经接近尾声了,在这2周中,我学到了很多,对eda的认识也进一步加深了。

从一个刚入门的学习者,渐渐的爱上了这门技术,虽然说对于eda的知识还有很多要学习和提高的地方,但是,在这2周中我还是感受到这门课程的魅力所在。

在选择串口通信这个课题时,我和我的同组组员对这个课题感到比较轻松,脑海中一下子出现了许多设计念头,于是我们就分头去寻找这方面的资料,通过图书馆的书籍资料,网络上的虚拟资料。

在2天的找资料的过程中,我开始觉得所谓的串口通信并非我想象的那么简单。

在看过一些资料后,越来越感觉到串口通信课题并非手到擒来。

在商量后,我们以一本参考书的资料为基础开始展开细致设计,却遇到了意想不到的问题。

在思考了2天,我才发现自己陷入了思维的局限性中。

经过3天的编程和功能完善,我们基本实现了所有的功能,各个模块的编译和**也都实现了。

但是,当将各模块组合,进行整体**时,问题出现了,得出的结果总是与预计的不同。

幸好,在老师与同学的帮助下,一步步互相**,检测,我们小组发现了问题所在。

重新对每一模块进行细致入微地排错,通过时序图推导结果,最终,我们成功的完成了系统构建。

从一开始的收集资料、开题,然后对子模块设计**,继而子模块形成系统,却又返回子模块的修改调试,最终完成课设任务,到如今的课设报告与抒发感想,这整一个过程,有小组成员间的分工合作,有师长同学间的**学习,确实让我获益良多。

而我觉得,最让我觉得受益匪浅的是,我体会到了专业学习中我们必须细致严谨,“步步为营“。

最后,感谢老师与同学的帮助,谢谢

六、 附图。

EDA课程设计报告

eda 课程设计报告。时间 2014年12月21日 学院自动化。专业班级自1204 姓名。学号。指导教师王丽君老师 成绩。2014年 12月。目录。卷烟机烟支漏气跟踪自检装置设计 1 一 设计背景及设计目的 3 1.1设计背景 3 1.2设计目的 3 二 设计原理 3 三 设计步骤 5 3.1模块分...

EDA课程设计报告

设计一个出租车自动计费器,计费包括起步价 行车里程计费 等待时间计费三部分,用四位数码管显示金额,最大值为999.9元,最小计价单元为 0.1元,行程 3公里内,且等待累计时间3分钟内,起步费为8元,超过3公里,以每公里1.6元计费,等待时间单价为每分钟1元。用两位数码管显示总里程,最大为99公里。...

EDA课程设计报告

课程名称eda技术。设计项目多功能数字钟。系 部 班级姓名学号 指导老师日期2010 06 09 电子系电子仪器仪表与维修仪表z082王叁少安老师。1 数字钟的设计要求。多功能数字钟具有计时功能和时钟的校时基本功能。计时功能采用24小时计时,显示时,分,秒。采用时校时,对于分钟和秒模块采用60进制实...