基于fpga的数据采集卡内容摘要:
WHEN 0010 = 发送第 2 位 IF (clkbaud_tras = 39。 139。 ) THEN txd_reg = txd_buf(0)。 txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1)。 南昌航空大学学士学位论文 14 state_tras = state_tras + 0001。 END IF。 WHEN 0011 = 发送第 3 位 IF (clkbaud_tras = 39。 139。 ) THEN txd_reg = txd_buf(0)。 txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1)。 state_tras = state_tras + 0001。 END IF。 WHEN 0100 = 发送第 4 位 IF (clkbaud_tras = 39。 139。 ) THEN txd_reg = txd_buf(0)。 txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1)。 state_tras = state_tras + 0001。 END IF。 WHEN 0101 = 发送第 5 位 IF (clkbaud_tras = 39。 139。 ) THEN txd_reg = txd_buf(0)。 txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1)。 state_tras = state_tras + 0001。 END IF。 WHEN 0110 = 发送第 6 位 IF (clkbaud_tras = 39。 139。 ) THEN txd_reg = txd_buf(0)。 txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1)。 state_tras = state_tras + 0001。 END IF。 WHEN 0111 = 发送第 7 位 南昌航空大学学士学位论文 15 IF (clkbaud_tras = 39。 139。 ) THEN txd_reg = txd_buf(0)。 txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1)。 state_tras = state_tras + 0001。 END IF。 WHEN 1000 = 发送第 8 位 IF (clkbaud_tras = 39。 139。 ) THEN txd_reg = txd_buf(0)。 txd_buf(6 DOWNTO 0) = txd_buf(7 DOWNTO 1)。 state_tras = state_tras + 0001。 END IF。 WHEN 1001 = 发送停止位 IF (clkbaud_tras = 39。 139。 ) THEN txd_reg = 39。 139。 txd_buf = 01010101。 state_tras=state_tras+0001。 END IF。 when 1111 = IF (clkbaud_tras=39。 139。 ) then state_tras=0000。 trasstart=39。 039。 key_entry2=39。 039。 end if。 WHEN OTHERS= IF (clkbaud_tras=39。 139。 ) then state_tras=state_tras+0001。 南昌航空大学学士学位论文 16 trasstart=39。 139。 END IF。 END CASE。 END IF。 END IF。 END IF。 END PROCESS。 波特率发生模块 设计的 UART 接收和发送按照相同的波特率进行,波特率可以通过接口模块的总线接口进行设置。 UART 收发的每一个数据宽度都是波特率发生器输出的时钟周期的16 倍,即假定当前按照 9600bit/s 进行收发,那么波特率发生器的输出时钟频率应该位 9600*16HZ,目的是为 在接受时进行精确地采样,以提出异步的串行数据。 根据给定的晶振时钟和要求的波特率发生器波特率的分频系数。 假定提供的外部时钟位12MHZ,可以很简单的通过总线写入不同的数值到波特率发生器保持寄存器,然后用计数器的方式生成所需要的各种波特率,即分频器,计算公式为: 12020000/9600*16。 如果希望输出 9600HZ 的波特率,可以得出从总线写入的数值为: 0000000001001110; 波特率发生器的状态机如图 44所示。 图 44 波特率发生器的状态机 实现波特率功能的部分 VHDL 程序如下: 空闲 状态 配置 完毕 复位 完毕 计算时钟分频比 复位首发状态机 复位握手信号线 位时钟计数器清零 配置波特率控制寄存器 起始位 南昌航空大学学士学位论文 17 CONSTANT div_par : std_logic_vector(15 DOWNTO 0) := 0000000001001110。 分频参数,其值由对应的波特率计算而得,按此参数分频的时钟频率是波倍特率的 16 倍,此处值对应 9600 的波特率,即分频出的时钟频率是 9600*16 PROCESS(clk,rst) BEGIN IF (NOT rst = 39。 139。 ) THEN div_reg = 0000000000000000。 ELSIF(clk39。 EVENT AND clk=39。 139。 )THEN IF (div_reg = div_par 0000000000000001) THEN div_reg = 0000000000000000。 ELSE div_reg = div_reg + 0000000000000001。 END IF。 END IF。 END PROCESS。 PROCESS(clk,rst) 分频得到 16倍波特率的时钟 BEGIN IF (NOT rst = 39。 139。 ) THEN clkbaud8x = 39。 039。 ELSIF(clk39。 EVENT AND clk=39。 139。 )THEN IF (div_reg = div_par 0000000000000001) THEN clkbaud8x = NOT clkbaud8x。 END IF。 END IF。 END PROCESS。 UART 接收模块 在异步串行通信中,需要采取有效的措施来避免错误的出现,在找准帧头起始位;选择比较可靠的采集点,确保数据判断的正确。 接收端不断检测线路的状态,若连续为 1后又检测到一个 0,就知道发来一个新字符,应马上准备接受。 所以只需要每个时钟周期都循环检测数据线,当发现数据线南昌航空大学学士学位论文 18 为低电平时就认为找到了起始位,显然这个时刻落后于起始位跃变沿的时间。 要保证异步通信的双方准确无误的交换信息,必须有效控制采集通信线路上电平信号的时 机,根据时机选择恰当的时机能够使系统准确稳定。 如图 35 所示的 D 点是每一数据位周期的中心点,所以一般系统中的 D点是最佳采集时机。 当所用的开发系统的时钟频率和波特率不匹配就容易产生固定的频差。 采用高稳定度的时钟可以将误差缩小,只要流出比较小的余度就可以。 因此,稍微靠近 A 点的 B点和 C 点是最佳采集时期。 采样过程分析 图如图 45所示。 图 45 采样过程分析 在异步串口接受中,帧结构起了至关重要的作用。 如果在数据 帧的结尾第一个停止位的位置抽取到了低电平,说明发生了帧错误。 接受模块的完成上述功能的 VHDL 语句的有限状态机 FSM( finite state machine)流程图如 46 所示。 图 46 接受模块有限状态机 起始位 数据 D0 B C D E F 空闲 状态 数据正 确 停止位确认 起始位确认 起始位有效 采采样数据 虚假起始位 检测到起始位 寄入数据存储器 没有检测到起始位 南昌航空大学学士学位论文 19 程序在侦测到起始位后,计 16个时钟周期,便开始接收数据,移位输入到 rxd_buf中,最后输出数据 seg_data。 实现该功能的部分 VHDL 程序如下: PROCESS(clkbaud8x,rst) 接受 PC 机的数据 BEGIN IF (NOT rst =‘ 139。 ) THEN rxd_reg1 =‘039。 rxd_reg2 =‘039。 rxd_buf = 00000000。 state_rec = 0000。 recstart =‘039。 recstart_tmp =‘039。 ELSE IF(clkbaud8x39。 EVENT AND clkbaud8x =‘139。 ) THEN。基于fpga的数据采集卡
相关推荐
_tinmeout)then count_k_end=39。 139。 else counter_k=Counter_k+1。 end if。 end if。 end process Count_key。 Count_alarm:process(Enable_count_a,clk) begin if(enable_count_a=39。 139。 )then counter_a=39。 039
STLI/O 标准的输入缓冲器。 还有 4 组或者 8 组的 VCC 引( VCCIO)用于驱动输出 I/O 引脚和使用LVTTL,LVCMOS 或者 PCII/O 标准的输入缓冲器。 CYCLONII 器件的 VCCINT 引脚必须接 的电源,如果 VCCINT 接的是,那么输入引脚允许接 , 或者。 VCCIO 引脚能从 , 或者 的电源中任选,依赖于输出的需求。
个阶段 即 GIS 模块 集成式 GIS 模块化 GIS 核 心 式 GIS 组 件 式 GIS 和 万 维 网 GIS[8] 其中组件式 GIS 和万维网 GIS 是现代 GIS 研究的热点 3 GIS 模块 GIS Modules 在 GIS 发展的早期阶段 由于受到技术的限制 GIS 软件只是一些用于满足某些功能要求的模块 并没有形成完整的系统 各个模块 之间不具备协同工作的能力
al strobe : std_logic。 begin process (sysreset,reset0,on_off0) begin if (sysreset=’ 1’ or reset0 = ’ 1’ ) then strobe = ‘ 0’。 elsif (on_off0’ event and on_off0 = ’ 1’ ) then strobe = not strobe。 end
要从 约束、综合、布局布线、 RTL 级代码等环节上找原因,也可以借助时序分析工具找原因。 ( 9) 时序分析 使用 EDA 软件的时序分析功能能够分析所有时钟的频率、周期、关键路径和其他所有时钟路径上的延时信息,进行建立时间和保持时间分析和输入到输出、输入到寄存器、寄存器到输出的延时分析等,从而可以找出不满足时序关系的原因所在。 时序分析是一个辅助功能,有时可以不做。 ( 10) 器件编程
和在编写程序简单,把 13 脚直接 GND; 14 脚串行数据输出端作为芯片级联端,实现更多数据的级联。 硬件电路总体设计实现 本课题设计用的是 88 的双基色点阵屏,使用四块点阵屏经过设计组合成的 1616 LED 点阵屏用来显示汉字和图片,所谓的 1616,是每一个汉字在纵、横行各用 16 像素点的区域内显示,满足了本次设计的要求。 由于本次使用的点阵屏是双基色的,所以要用 四个