版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 基于Soc-FPGA的心电信号采集系统设计 The ECG signal acquisition system based on Soc - FPGA design 学校 湖北经济学院 专业 电子信息工程 姓名 黄艳丽 叶鼎 贾云心 指导教师 孔德永 湖北经济学院 论文创新性声明秉承学校严谨的学风和优良的科学道德,本人声明所呈交的论文是我队在导师指导下进行的研究工作及取得的研究成果。尽我们所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰写过的研究成果;也不包含为获得湖北经济学院或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献
2、均已在论文中做了明确的说明并表示了谢意。论文与资料若有不实之处,本队承担一切的法律责任。本队签名: 黄艳丽 叶鼎 贾云心 日期 2014-10-16 摘要 介绍基于Soc-FPGA的心电信号采集及其系统的研究。根据人体心电信号的征,设计性能优良的心电信号采集显示系统,选用最新的Cyclone V-Soc-FPGA芯片为核心,心电信号经过AD620仪表运放和OP07运算放大器以及12位的A/D转换,然后通过D/A转换经过VGA接口在液晶显示屏上实时显示动态ECG图像和每分钟的心率。该系统性能可靠,成本低廉,抗干扰能力强,体积小,重量轻,实时性强等特点。 关键词:Soc-FPGA;心电监护;信号实
3、时采集;数据存储 Abstract It is introduced based on Soc - FPGA ECG signal acquisition and system research.Designed according to human body character of ECG signal, good performance of ECG signal collection and display system, choose the latest Cyclone V - Soc - the FPGA chip as the core, the ECG signal afte
4、r AD620 meter op-amp and OP07 operational amplifier and 12 bit A/D conversion, and then through the D/A conversion through the VGA interface dynamic ECG images displayed on the LCD screen in real time and the heart rate per minute. The system is reliable in performance, low cost, strong anti-interfe
5、rence ability, small volume, light weight, strong real-time performance, etc. Key Words:Soc-FPGA;ECG;Real-time signal acquisition; Data is stored 目录1.系统整体设计62.功能与指标63心电信号的形成73.1心电图73.2心电信号的特性83.3心电信号干扰源84系统硬件电路设计94.1 前置放大及右腿驱动94.2滤波模块104.3 50Hz陷波电路114.4电平抬升电路124.5电压比较电路125. 软件设计135.1系统软件流程设计135.2系统软
6、件框架146. 测试方案与测试结果206.1 系统测试方案206.2 测试仪器与设备216.3 测试数据和功能217 特色221.系统整体设计 心电监护仪系统包括心电信号采集硬件电路和软件显示系统。系统的结构框图如下所示。 心电采集电路带通滤波电平抬升50Hz陷波主放大前置放大 右腿驱动电压比较 RAM数据显示AD转换FIFO数据缓冲 液晶屏显示 存储数据 心率测量 心电处理平台 2.功能与指标 对于个人心脏进行随时随地进行监护,为心脏疫情的早期检测和亚健康人群进行预防提供有效的检测,为医生提供病人相关的有信息。 心电信号采集系统指标: 1:显示ECG波形,HR数值; 2:导联模式:三导联(R
7、A,LA,RL); 3:增益:可调; 4:漏电流:30uA; 5:抗干扰:波形稳定,参数准确。 3心电信号的形成心电信号从宏观上记录心脏细胞的除极和复极过程,是人体心脏工作产生的生物电流, 在人体内,窦房结发出一次兴奋,按一定途径和时程,依次传向心房和心室,引起整个心脏兴奋。每个心动周期中,心脏各个部分兴奋过程中出现的生物电变化的方向、途径、次序和时间都有一定规律。这种生物电变化通过心脏周围的导电组织和体液反映到身体表面上,使身体各部位在每一心动周期中也都发生有规律的生物电变化,即心电位。心电图(ECG)即通过电极将变化着的电位差检测并记录下来。3.1心电图正常的心电波形分为P,P-R,QRS
8、,S-T,T,J,U等几个部分。P:心脏的兴奋发源于窦房结,最先传至心房,故心电图各波中最先出现的是代表左右两心房兴奋过程的P波。P波形小而圆钝,P波的宽度一般不超过011秒,不超过0.25毫伏。P波的振幅和宽度超过正常范围即为异常,表示心房肥大或房内传导阻滞。P-R间期:是从P波起点到QRS波群起点的时间距离,代表心房开始兴奋到心室开始兴奋所需的时间。一般成人P-R间期为0.120.20s。P-R间期随心率与年龄而变化,年龄越大或心率越慢,间期越长。间期延长表示房室交界区的时间延长,说明有房室传导障碍,常见于房室传导阻滞。QRS波群: 代表两个心室兴奋传播过程的电位变化。典型的QRS复合波包
9、括三个相连的波动。第一个向下的波为Q波,继Q波后一个狭高向上的波为R波,与R波相连接的又一个向下的波为S波。由于这三个波紧密相连且总时间不超过010秒,故合称ORS复合波。QRS复合波所占时间代表心室肌兴奋传播所需时间,正常人在006-010秒之间。时间超过0.12s,表示室内传导障碍。振幅超过正常,考虑左或右心室肥厚。S-T段:由QRS波群结束到T波开始的平线,反映心室各部均在兴奋而各部处于去极化状态,故无电位差。S-TS上移超过正常范围多见于心肌梗塞,急性心包炎。T波:是继QRS波群后的一个波幅较低而波宽较长的电波,反映心室兴奋后再极化过程。再极化过程同心肌代谢有关,因而较去极化过程缓慢,
10、占时较长。T波低平或倒置,常见于心肌缺血,低血钾等。3.2心电信号的特性 正常心电信号的幅值范围在10V-4mv之间,典型值为1mV。频率范围在O.05-100Hz以内,90的ECG频谱能量集中O.25-35Hz之间,心电信号频率较低,大量的是直流成分。它的主要频率范围是O.05-100Hz,大部分能量集中在O.05-40Hz。心电信号是一种典型的人体生理信号,幅度小、频率低,高阻抗性,信噪比低,易受外界环境干扰。心电信号的信号源阻抗因人而异,和生理状态,电极的安放位置有关,源阻抗的不稳定,将使放大器电压增益不稳定,从而造成测量误差。3.3心电信号干扰源 采集心电信号时,会受到人体生物电干扰,
11、50Hz工频干扰,以及各种外部高频电磁干扰,噪声来源通常有下面几种: (1)基线漂移和呼吸时ECG幅值的变化 基线漂移和呼吸时ECG幅值的变化一般由人体呼吸、电极移动等低频干扰所引起,频率小于5Hz;其变化可视为一个加在心电信号上的与呼吸频率同频率的正弦分量,在O.015-O.3Hz处基线变化变化幅度的为ECG峰峰值的15。 (2)电极接触噪声 电极接触噪声是瞬时干扰,来源于电极与肌肤的不良接触,即病人与检侧系统的连接不好。其连接不好可能是瞬时的,如病人的运动和振动导致松动;也可能是检测系统不断的开关、放大器输入端连接不好等。电极接触噪声可抽象为快速、随机变化的阶
12、跃信号,它按指数形式衰减到基线值,包含工频成分。这种瞬态过渡过程可发生一次或多次、其特征值包括初始瞬态的幅值和工频成分的幅值、衰减的时间常数;其持续时间一般的1s左右,幅值可达记录仪的最大值。 (3)肌电干扰(EMG) 肌电干扰来自于人体的肌肉颤动,肌肉运动产生毫伏级电势。EMG基线通常在很小电压范围内。所以一般不明显。肌电干扰可视为瞬时发生的零均值带限噪声,主要能量集中在30-300 Hz范围内。 (4)信号处理中用电设备产生的仪器噪声 心电信号是由人体心脏发出的极其精密、相当复杂并且有规律的微弱信号,外界干扰以及其它因素的存在都会使其变
13、得更为复杂,要准确地对其进行自动检测、存储、分析却是一项十分艰巨的任务。例如,工频干扰信号对心电图的影响会使心电信号的特征点定位变得十分困难。因此,心电信号的监视、分析必须在建立在有效抑制各种干扰、检测出良好的心电信号的基础之上。4系统硬件电路设计4.1 前置放大及右腿驱动 信号提取时,皮肤接触电极到分别通过 1.5m 长的屏蔽导联线与前置放大器 相连接。由于信号线对屏蔽线的输入电容不完全对称,造成共模电压的不等量衰 减,使得包括导联在内的放大器共模抑制比降低,从而使系统抑制干扰的能力下 降。其中工频干扰引起的共模信号可能远大于心电信号,其影响尤为严重。为有效地消除输入电路不对称而引起的电压分
14、配效应所产生的共模干扰,采用右腿驱动电路。从输入导联取出的共模电压送到右腿放大器反向放大,经一个限流电阻接到右腿电极,即等效为以人体为相加点的电压并联负反馈电路。任何流入人体的位移电流基本等于反馈电阻上的驱动电流。采用右腿驱动电路,对50Hz干扰的抑制并不以损失心电信号的频率成分为代价。但由于右腿驱动存在交流干扰电压的反馈电路,而交流电流经人体,成为不安全因素,限流电阻通常在1M以上。 前置放大模块在整机中处于非常重要的地位,其性能决定了整机的主要技术指标。前置放大模块应具有高输入阻抗、高共模抑制比、低噪声、低漂移的特点。我们采用了仪表放大芯片AD620。其内部是集成共模抑制比最小可达可 10
15、0dB 的三运放仪用放大电路,只需外接一个电阻可调节增益,增益从 110.000 倍可调。其差模输入阻抗高达10000M,可保证总电路差模输入阻抗大于5M。此外,AD620还具有低噪声、低输入偏置电流特性。电极接触噪声产生的直流极化电压是差模信号,可能会造成运放的饱和,可以利用AD620的REF 端进行输出偏移调零。虽然提高放大器的第一级增益有利于降低输出噪声,但考虑到极化电势的影响,第一级仪表放大电路增益不应太大。我们的前级增益设置为7,在后级放大时增益为150,总增益为1050。4.2滤波模块(1) 高通滤波电路心电信号的最低可能频率成分只达到 0.5Hz(相应于心脏搏动 30 次/分),
16、但为降低信号因相移产生线性失真,心电信号放大电路的低频截止频率必须达到心电信号的低频截止频率的 1/10,即 0.05Hz。实际上,在前置放大模块采用了高通负反馈滤波器进行隔直和低通滤波,0.05Hz 信号包括直流极化信号已基本被滤掉。为进一步满足高通滤波特性,可以采用效果不错且易于实现 RC 一阶无源滤波。(2)低通滤波电路滤除混入的各种高频干扰噪声。对滤波特性的要求主要是信号的时域失真要小,心电信号具有脉冲波形的特征,为保证不失真放大,滤波器应具有较好的线性相位特性。通常采用模拟有源滤波器实现。模拟滤波器主要有巴特沃斯滤波器、 切比雪夫滤波器和贝赛尔滤波器三种,其中贝赛尔滤波器具有线性相移
17、特性,适用于心电信号的滤波处理。为了达到更好的心电信号处理效果,我们采用二阶贝塞尔滤波电路。4.3 50Hz陷波电路无处不在的50Hz工频干扰对心电信号产生巨大干扰,为了是的心电信号的各波段较好显示,我们进一步采用了50Hz陷波技术。最典型的陷波电路是无源双T网络加运算放大器,双T网络实际是由低通和高通滤波器并联组合成的二阶有源带阻滤波器,两个运算放大器接成射随状态,增益都为l。本方案设计采用的电路就是这种双T网络构成的带阻滤波器。4.4电平抬升电路为了将采集到的心电模拟信号不失真的送给ADC,我们做了电平抬升电路,将信号电压抬1V。4.5电压比较电路为了检测到人体的心率,我们设计了比较电路。
18、5. 软件设计5.1系统软件流程设计 如下图所示,当EGC信号输入时,系统对输入EGC信号的频率进行测量并进行实时采样,并利用编码键盘来控制波形的位置以及选择液晶显示器的显示功能。ECG图像显示 启动 功能键按下?数据处理 停止 正常显示存储显示调出 量化存储 实时采样ECG信号输入5.2系统软件框架 基于流程设计我们的框架图,一共有五个模块组成。分别为AD7928采样模块,PS2接口编码键盘模块,存储与回放模块,测心率模块以及VGA显示模块。5.21 AD7928采样模块 由于板载的AD7928是一个12位精度,1MSPS的AD转化芯片。故对于只有1Hz到2Hz的ECG信号来说在速度和精度上
19、完成合乎要求。然而由于AD的采样速度与VGA的显示速度是不同的,因此为了克服这个前后速度不同的问题。我们使用FIFO模块进行数据缓存。最后AD7928模块图如下5.2.2 PS2接口编码键盘模块考虑到DE1-SOC上的按键只有4个,于是我们决定使用编码键盘来解决按键不足的情况。而对于PS2接口共有6个引脚,其中最重要的是Pin5时钟,Pin1数据。而PS2接口发来的数据又有通码和断码之分。因此我们要对PS2进行解码。我们将PS2模块又分为电平检测模块和PS2解码模块,其中键盘中的A键功能是压缩ECG图像的幅度,D键功能是增加ECG图像的幅度,W键功能是使ECG图像上移,S键功能是使ECG图像下
20、移,SPACE键的功能是存储ECG图像,ENTER键的功能是回放ECG图像。5.2.3 心率测量模块 我们在硬件部分把ECG信号通过比较器整成方波信号,然后我们在FPGA这边通过检测二个下降沿之间的时间来换算出心率。 5.2.4 存储与回放模块 关于存储与回放,我们经过团队讨论决定使用一种新的模式。一般存储与回放是当用户按下存储键的时候,然后开始存储波形。这样会有一个问题就是用户存储的是他按下按键后的波形而不是他看见那时候的波形。一般使用的话,这种情形并无大碍,可是对于ECG信号,当心电监护仪刚好检测到一个异常信号,一般的存储模式就很有可能存储不到。因此针对这个问题,我们团队采用另外一种思路。
21、即在正常情况下,存储空间也一样有ECG的信号流动。当用户按下存储键时,存储空间的数据停止流动达到信号实时存储的目的。因此我们将存储与回放模块有分为RAM模块用于正常的VGA的显示。RAM_VGA模块用于存储ECG数据。STORAGE_CHOOSE模块用来是显示正常ECG数据还是存储的ECG数据。5.2.5 VGA显示模块 VGA协议主要由5个输入信号组成:HSYNC Signal,VSYNC Signal以及3个颜色信号RGB Signal。其中,HSYNC Signal是列同步信号,VSYNC Signal是行同步信号,RGB Signal 是红色-绿色-蓝色信号。VGA的扫描频率是固定,我
22、们根据液晶显示屏使用800*60060Hz的显示标准。然后根据我们的GUI界面布局我们用了6个ROM来存储GUI界面的数据。其中ROM1中存储的是“心电监护仪”,ROM2中存储的是“湖北经济学院”,ROM3中存储的是“心”,ROM4中存储的是“率”,ROM5中存储的是0到9的数字库,ROM6中存储的是我们学校的校徽。因此其程序框图如下 另外我们在VGA显示模块中遇到的最大的点就是我们的ECG图像动态显示问题。如何让显示的ECG图像更加完整和真实,我们团队对于这个问题作了大量的改进。我们知道常见的波形显示方法有二种。假设存储在波形RAM中的数据为x(k),(m,n)为扫描点在波形显示区域中的相对
23、坐标。 方法一:当扫描点进入波形显示区域时,开始读取波形RAM中的数据,将读出的数据x(k)与当前扫描在波形显示区域中的纵坐标n或者N-n作比较,如果相等则显示,否则不显示。下图为显示的效果能明显看出中间有断点使的整个ECG图像不是很完整。 方法二:当扫描点进入波形显示区域时,开始读取波形ROM中的数据, 将当前扫描点在波形显示区域中的纵坐标n或者N-n与读出的当前的数据x(k)和上一个波形数据x(k-1)进行对比,如果扫描点刚好处于这两个值之间则显示,否则不予显示。那么如何捕捉上一个波形数据x(k-1),我们使用了移位寄存器来捕捉上一个波形数据x(k-1)。而我们在实际中发现把方法一和方法二
24、结合在一起显示的效果最好,对于“变化缓慢甚至基本没有变化”和“变化比较陡峭”的波形显示具有很好的视觉显示效果。显示效果如下,能够很明显的看出ECG图像的各个波段。6. 测试方案与测试结果6.1 系统测试方案使用导联线测量时,要将电极放在左右手腕和右腿。将导联线插头插入主机导联插口,一次性心电电极夹夹在肢体相应位置后,连接好导联线即可进行测量。 肢体电极位置:电极标志符号 色码肢体电极放置位置 RA(-) 绿色 右上肢内侧 LA(+) 黄色 左上肢内侧 RL(N) 黑色 左下肢内侧 注意:使用导联线测量时,两手不能接触两侧的金属电极片,否则会产生干扰。6.2 测试仪器与设备 本设计对心电测试所选
25、用的相应仪器与设备的相关如表1所示 表1 测试仪器与设备列表 仪器名称 型号 用途 液晶显示屏 Lenovo显示ECG图像6.3 测试数据和功能能够明显看出ECG的各个波段。 P波,最先出现的一个振幅不高的圆钝波形,它记录的是窦房结激动的右、左心房的激动。因为窦房结位于右心房,心房的激动先由它开始,所以P波的前半部分记录的是右心房的激动,中间部分记录的是左、右心房的共同激动而后部则代表左心房的激动。QRS波群,继P波之后出现的一个狭窄但振幅高的波群。由q波(有或无)、R波和S波组成。它代表着兴奋从房室结发出先后通过房室束、左右束支和纤细的浦肯野纤维进入心肌细胞,刺激心室的收缩,因此可以将其看作
26、是心室收缩的开始的心电图表现。T波,上个波群暂停之后出现的波,代表着心室的复极(心室的舒张),以备下一次心室的除极。观测T波我们要注意它的方向、形态和(高度)深度。(1)方向,正常情况下,在、导联中T波是直立的;导联中则可以出现直立、平坦、双向甚至是倒置的T波;T波在aVR导联中是肯定倒置的,而在aVL和aVF导联中则是和QRS波群的主方向一致的。U波,T波后的一个很微小的波,正常的u波并不是在每一个导联中都显而易见,它究竟代表什么尚无定论。较为完整的捕捉并显示ECG信号并测的心率为91次/分。 7 特色 我们由台式电脑得到的启发,把我们的心电监护仪做成分离式心电仪。让硬件采样,Soc-FPG
27、A数据处理,液晶显示各自通过相应的接口相联。这让我们的心电监护仪在不降低显示效果的基础上,又能通过拆装便于携带。并且由是分离式心电仪,那么它的维护和更新更加简单并且成本更低。另外由于我们对与存储的思路的更改,使我们的存储能够做到实时性强。此外,一般来说医用心电监护仪价钱昂贵(一般几万到十几万不等),并且不便携带。但我们做的心电监护仪价格低廉(1000元左右)。这还是因为是在DE1-SOC开发板本身的价格就较为昂贵,如果单独基于Cyclone V Soc芯片做其价格将会更加低廉。而心电仪等医疗电子产品价格的下降和其性价比的提高其重要意义在于,心电仪等医疗电子产品是智能云医疗的基石,只有当心电仪等
28、医疗电子产品价格下降到能飞入平常百姓家时,那么智能云医疗的时代将会真正来临,到时整个的医疗格局就会发生改变。医疗资源分布不均衡的问题可以得到极大的缓解。 参考文献1杨开陵,徐巧玉,王志慧,王军委,马瑞. FPGA那些事儿-Verilog HDL 建模技巧. 北京航天航空大学出版社,2013.2夏宇闻. Verilog 数字系统设计教程. 北京航天航空大学出版社,2013.3吴厚航. 深入浅出玩转FPGA. 北京航天航空大学出版社, 2010.4郑争兵. 基于FPGA的VGA波形显示系统设计与实现A, 2013.5刘华东. Altera系类FPGA芯片IP核详解. 电子工业出版社, 2014.6
29、仁爱锋,罗丰,宋士权,董怡斌. 基于FPGA的嵌入式系统设计-Altera Soc FPGA(第二版). 西安电子科技大学出版社, 2014. 附录A系统源代码module vga_test/VGA显示主模块(input CLOCK_50,input CLOCK2_50,input CLOCK3_50,input CLOCK4_50,inputrst_n,input 9:0num,/input- from square_test/ VGA /output 7:0VGA_B,output VGA_BLANK_N,output VGA_CLK,output 7:0VGA_G,output VGA_
30、HS, output 7:0VGA_R,output VGA_SYNC_N,output VGA_VS,/AD/input 7:0read_data,/input - from AD7928output8:0read_addr,/ output- to AD7928/ps2/input W, /input - from ps2_demoinputS /input - from ps2_demo);wire63:0 rom1_data; rom_c_module U1(.address(rom1_addr),.clock(CLOCK4_50),.q(rom1_data);wire31:0 rom
31、2_data;rom2_module U2 ( .address(rom2_addr), .clock(CLOCK4_50), .q(rom2_data);wire31:0 rom3_data;rom3_module U3( .address(rom3_addr), .clock(CLOCK4_50), .q(rom3_data);wire31:0 rom4_data;rom4_module U4( .address(rom4_addr), .clock(CLOCK4_50), .q(rom4_data);wire15:0 rom5_data;rom5_module U5(.address(r
32、om5_addr),.clock(CLOCK4_50),.q(rom5_data);wire8:0 rom1_addr;wire7:0 rom2_addr;wire4:0 rom3_addr;wire4:0 rom4_addr;wire8:0 rom5_addr;wire4:0 rom6_addr;vga_control_moduleU6(.CLOCK_50(CLOCK_50),.CLOCK2_50(CLOCK2_50),.CLOCK3_50(CLOCK3_50),.CLOCK4_50(CLOCK4_50),.rst_n(rst_n),.VGA_B(VGA_B),.VGA_BLANK_N(VG
33、A_BLANK_N),.VGA_CLK(VGA_CLK),.VGA_G(VGA_G),.VGA_HS(VGA_HS),.VGA_R(VGA_R),.VGA_SYNC_N(VGA_SYNC_N),.VGA_VS(VGA_VS),.rom1_addr(rom1_addr),.rom1_data(rom1_data),.rom2_addr(rom2_addr),.rom2_data(rom2_data),.rom3_addr(rom3_addr),.rom3_data(rom3_data),.rom4_addr(rom4_addr),.rom4_data(rom4_data),.rom5_addr(
34、rom5_addr),.rom5_data(rom5_data),.rom6_addr(rom6_addr),.rom6_data(rom6_data),.read_addr(read_addr),.read_data(read_data),.num_ten(num_ten),.num_one(num_one),.num_hun(num_hun),.S(S),.W(W);wire 3:0num_one;wire 3:0num_ten;wire 3:0num_hun;num_module U7/心率数值显示(.clk(CLOCK4_50),.rst_n(rst_n),.num(num),.num
35、_hun(num_hun),.num_ten(num_ten),.num_one(num_one);wire31:0 rom6_data;rom6_module U8(.address(rom6_addr),.clock(CLOCK4_50),.q(rom6_data);endmodule module vga_control_module/VGA显示子模块(/ CLOCK /input CLOCK_50,input CLOCK2_50,input CLOCK3_50,input CLOCK4_50,inputrst_n,/ VGA /output 7:0VGA_B,output VGA_BL
36、ANK_N,output VGA_CLK,output 7:0VGA_G, output reg VGA_HS,output 7:0VGA_R,output VGA_SYNC_N,output reg VGA_VS,/rom/input 63:0rom1_data,/input - from rom_c_moduleinput 31:0rom2_data,/input - from rom2_moduleinput 31:0 rom3_data,/input - from rom3_moduleinput 31:0rom4_data,/input - from rom4_moduleinput
37、15:0rom5_data,/input - from rom5_moduleinput 31:0rom6_data,/input - from rom6_moduleinput 7:0read_data,/input - from vga_testoutput8:0rom1_addr,/input - from rom_c_moduleoutput7:0rom2_addr,/input - from rom2_moduleoutput 4:0 rom3_addr,/input - from rom3_moduleoutput4:0rom4_addr,/input - from rom4_mo
38、duleoutput8:0rom5_addr,/input - from rom5_moduleoutput4:0rom6_addr,/input - from rom6_moduleoutput8:0read_addr,/input - from vga_test/num_module/input3:0num_one,/input - from num_moduleinput 3:0 num_ten,/input - from num_moduleinput3:0num_hun,/input - from num_module/inputW,/winputS /s/);/=/ REG/WIR
39、E declarations/=wire clk;assign VGA_CLK = clk;assign clk = CLOCK4_50;parameter VGA_HTT = 12'd1040-12'd1; /Hor Total Timeparameter VGA_HST = 12'd120;/Hor Sync Timeparameter VGA_HBP = 12'd64;/Hor Back Porchparameter VGA_HVT = 12'd800;/Hor Valid Timeparameter VGA_HFP = 12'd56;/H
40、or Front Porchparameter VGA_VTT = 12'd666-12'd1; /Ver Total Timeparameter VGA_VST = 12'd6;/Ver Sync Timeparameter VGA_VBP = 12'd23;/Ver Back Porchparameter VGA_VVT = 12'd600;/Ver Valid Timeparameter VGA_VFP = 12'd37;/Ver Front Porch/-/x and y counterreg11:0 xcnt;reg11:0 ycnt;
41、always (posedge clk or negedge rst_n)if(!rst_n) xcnt <= 12'd0;else if(xcnt >= VGA_HTT) xcnt <= 12'd0;else xcnt <= xcnt+1'b1;always (posedge clk or negedge rst_n)if(!rst_n) ycnt <= 12'd0;else if(xcnt = VGA_HTT) beginif(ycnt >= VGA_VTT) ycnt <= 12'd0;else ycnt
42、<= ycnt+1'b1;endelse ;/-/hsy and vsy generatealways (posedge clk or negedge rst_n)if(!rst_n) VGA_HS <= 1'b0;else if(xcnt < VGA_HST) VGA_HS <= 1'b1;else VGA_HS <= 1'b0;always (posedge clk or negedge rst_n)if(!rst_n) VGA_VS <= 1'b0;else if(ycnt < VGA_VST) VGA_V
43、S <= 1'b1;else VGA_VS <= 1'b0;/-/vga valid signal generatereg vga_valid;always (posedge clk or negedge rst_n)if(!rst_n) vga_valid <= 1'b0;else if(xcnt >= (VGA_HST+VGA_HBP) && (xcnt < (VGA_HST+VGA_HBP+VGA_HVT)&&(ycnt>=(VGA_VST+VGA_VBP)&&(ycnt<(
44、VGA_VST+VGA_VBP+VGA_VVT)vga_valid <= 1'b1;else vga_valid <= 1'b0;/*/wire10:0 column;wire10:0 row;assign column = vga_valid ? xcnt11:0 - 8'd216 : 11'd0;assign row = vga_valid ? ycnt11:0 - 5'd27:11'd0;assign VGA_BLANK_N = vga_valid;assign VGA_SYNC_N = 1'b0;/-/num outp
45、ut/reg8:0 addr_ten;reg8:0 addr_one;reg8:0 addr_hun;always(posedge clk or negedge rst_n)if(! rst_n) begin addr_one <= 9'd0; endelse case(num_one)4'd1 : addr_one <= 9'd0;4'd2 : addr_one <= 9'd32;4'd3 : addr_one <= 9'd64;4'd4 : addr_one <= 9'd96;4'
46、d5 : addr_one <= 9'd128;4'd6 : addr_one <= 9'd160;4'd7 : addr_one <= 9'd192;4'd8 : addr_one <= 9'd224;4'd9 : addr_one <= 9'd256;4'd0 : addr_one <= 9'd288;endcasealways(posedge clk or negedge rst_n)if(! rst_n) begin addr_ten <= 9'd0
47、; endelse case(num_ten)4'd1 : addr_ten <= 9'd0;4'd2 : addr_ten <= 9'd32;4'd3 : addr_ten <= 9'd64;4'd4 : addr_ten <= 9'd96;4'd5 : addr_ten <= 9'd128;4'd6 : addr_ten <= 9'd160;4'd7 : addr_ten <= 9'd192;4'd8 : addr_ten <
48、;= 9'd224;4'd9 : addr_ten <= 9'd256;4'd0 : addr_ten <= 9'd288;endcasealways(posedge clk or negedge rst_n)if(! rst_n) begin addr_hun <= 9'd0; endelse case(num_hun)4'd1 : addr_hun <= 9'd0;4'd2 : addr_hun <= 9'd32;4'd3 : addr_hun <= 9'd6
49、4;4'd4 : addr_hun <= 9'd96;4'd5 : addr_hun <= 9'd128;4'd6 : addr_hun <= 9'd160;4'd7 : addr_hun <= 9'd192;4'd8 : addr_hun <= 9'd224;4'd9 : addr_hun <= 9'd256;4'd0 : addr_hun <= 9'd288;endcase/移动控制/reg 7:0 p;/竖直方向控制计数器reg 7:0 q;/水平方向控制计数器always(negedge rst_n or negedge S)if(!rst_n) p <= 8'd0; else if(!S) p <= p + 8'd2;else ;always(negedge rst_n or negedge W) if(!rst_n) q <= 8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年天津渤海职业技术学院单招职业技能考试题库附答案详解(夺分金卷)
- 2026年安徽工业经济职业技术学院单招职业适应性测试题库含答案详解(巩固)
- 2025安全培训消防安全考试试题及答案
- 2026年特种设备锅炉安全管理工作情况的自查报告
- 2025年保安员培训考试试题及答案
- 2025年仓库员工培训试题(部门级)及答案
- 小学阶段课外阅读活动设计方案
- 2026年天津国土资源和房屋职业学院单招职业适应性测试题库附参考答案详解(完整版)
- 2026年天津电子信息职业技术学院单招职业技能测试题库附答案详解(综合题)
- 2026年安徽城市管理职业学院单招综合素质考试题库及答案详解(夺冠)
- 风电项目安全生产实施计划书
- 皮肤型红斑狼疮诊疗指南(2025年)
- 融媒体应聘考试题及答案
- 2025年西安医专选拔面试题库及答案
- 鄂科版二年级全册心理健康教育教案
- 《SBT 11204-2017衣物清洗服务规范》(2026年)实施指南
- 老年2型糖尿病合并认知障碍照护方案
- 高校交通安全课件
- 雨课堂在线学堂《医学实验技术与方法新进展》单元考核测试答案
- 雨课堂在线学堂《文化差异与跨文化交际》单元考核测试答案
- 机械设计程序
评论
0/150
提交评论