该系统利用FPGA间接控制MAX4312选通所需的两路文章通道,实现文章通道之间的相互切换。根据开关控制信号的设计思想,在FPGA中对拨动开关的输入信号进行去抖动,然后对不同的开关操作进行编码,最后将信号送入DSP进行处理。l系统的总体结构系统的总体结构如图1所示。十六个CCD图像传感器被安装在一个工业织机上以监控织物图像。两片MAX4312选择16路图像和文章信号中的一路,数字图像信号经可编程文章输入设备SAA7111处理后从VP0输出。同时,SAA7111输出相应的行、场同步信号HS、VS和用HS锁定的时钟信号LLC、LLC2,并用这些信号对EP3C25F324C8中的图像进行预处理。然后将处理后的图像通过PPI口送到BF561进行算法处理,最后将处理结果送到报警和状态指示装置,实现织机的报警功能。为了使图像监控更加方便,系统设计中增加了电平拨动开关和脉冲拨动开关。电平开关停止输入图像的切换,并将其固定在文章输入图像之一上。脉冲开关可以左右拨动,每次左右拨动都会产生一个短暂的上升脉冲,同时图像会向前或向后拨动,从而实现手动选择文章输入通道的功能。2软件模块设计2.1开关控制信号在实际工程中,BF56l连接到FPGA的PF管脚较少。为了节省资源,BF561中只有BF9可以识别两个拨动开关的动作。因此,首先,需要在FPGA中对两个拨动开关的输入信号进行处理和积分,以获得合适的信号。本系统的开关控制信号的设计思路:因为设计这个信号的目的是为了识别开关控制动作。因此,只要任何一个开关动作,就需要产生一个脉冲。如果只有脉冲信号,只能知道开关动作了,不知道哪个开关动作了。因此,为了识别哪个开关有什么动作,需要用双口RAM中的数据进行解码。该系统设计的脉冲持续时间对BF561并不重要,只要BF561能识别该脉冲即可。由于系统中有两个拨动开关,一个是电平拨动开关,一个是脉冲拨动开关,所以只要根据电平拨动开关的动作做出相应的脉冲信号,然后将这个信号与脉冲拨动开关产生的原始信号进行逻辑组合就可以得到所需的目标信号。因为拨动开关是一个机械触点,所以在打开和关闭的时候会有相应的前沿和后沿抖动。为了使每个动作只响应一次,需要对原始开关信号进行去抖动。抖动信号分为两种:一种是时间短的干扰信号,如高频毛刺;另一种是长时间干扰信号,如开关抖动。这里的拨动开关都是手动操作的,所以触发时间不是很短,一般小于10 Hz。根据以上分析,开关抖动信号属于后者。因此,在每次开关操作之后,其产生的信号被连续采样。如果每次采样都是低电平或高电平,则认为这个信号不是抖动,开关状态确实发生了变化。整个设计过程用Verilog硬件描述语言编写,然后在QuartusII平台上编译,用SignalTap逻辑Arlalvzer对信号进行采样分析。调试完成后,与其他程序一起写入FPGA的配置器件EPCSl6。图2至图4分别是每个开关动作去抖动之前和之后的实时信号采样图。去抖模块中的部分代码如下:其中clk是频率为13.5 MHz的时钟信号,clk_cnt是采样间隔计数器。当clk_cnt为135 000时,采样一次,即每10 ms采样一次,寄存器shuru_temp存储前一个开关信号的状态,shum存储当前开关信号的状态。如果shuru_temp的值等于shtlm的值,则计数器test_cnt自动递增l,如果四个连续样本的值相等,即test_cnt=4,则去抖动输出将随输入而变化。

使用水平拨动开关信号作为输入,产生脉冲信号来识别开关动作。它的代码如下:在代码中,寄存器level_contrl_TEMP存储被level_contrl延迟了256个时钟周期的信号,然后level_eontrl_TEMP中存储的信号与level_co-ntrl的值不同或者产生所需的脉冲信号。在调试过程中发现,去抖动后的信号中往往夹杂着持续时间较短的高频脉冲干扰信号,因此在设计中采用了两级D触发器延时来彻底消除高频脉冲干扰,其程序代码如下:2.2双口ram和开关信号编码设计双口RAM可分为真假双口。真正的双端口两个端口都可以读写,互不干扰。在这个设计中,根据实际需要,增加的RAM模块一端是只读的,另一端是只写的,所以读写互不干扰。根据以上分析,开关控制信号只能知道有开关控制动作,但不能识别哪个开关动作了。因此,在设计中,首先利用MegaWizardPlug_In Manager中的宏功能块RAM: 2 _ port生成一个双端口RAM存储块,然后适当调整这个宏功能模块的参数,生成一个符合其具体要求的模块,如图5所示。在设计过程中,首先对开关动作进行编码。然后将编码后的数据存储在空间大小为8的双口RAM中。当BF561检测到PF9上的脉冲时,它读取PF中断中指定地址的数据,然后根据该数据解码开关状态,并根据解码的控制信息操作两个MAX4312器件来控制文章通道。切换动作的编码程序代码如下:整个设计有四个切换动作,分别编码成数据0l,02、03、04,然后这四个编码数据存储在双口模块中,等待BF561读取解码。图6显示了在SignalTap逻辑分析仪中将脉冲开关转至右侧后,RAM中存储的数据的采样。程序中RAM的读信号rden_signal由地址信号DSP_A控制,存储体选择信号DSP_AMSl和DSP读信号DSP _由DSP发送。当DSP不从双口读取数据时,必须给DSP的数据线分配高阻,以免影响DSP数据线上SDRAM的运行。赋值指令如下:assignDSP_D=(rden_signal=l 'b1)?DSP _ D _ TEMP8 ' hzz其中,DSP_D_TEMP是从双端口读取的数据。结论首先介绍了整个系统的工业背景和硬件架构,然后重点介绍了如何在FPGA中处理开关控制信号,以达到可靠响应每个开关动作的目的。整个设计程序在Quartus平台上用Verilog硬件描述语言编写,利用Quartus中的下载工具和SignalTap逻辑分析仪工具进行实时下载采样,多次调试验证。该设计已成功应用于布料机报警系统中,每次拨动开关都能准确可靠地切换文章通道。虽然这个系统只有两种开关,但是整个程序的设计思想对于多种开关控制也是通用的,只需要稍微改动一下细节就可以识别多种开关动作。