【医院呼叫系统】基于FPGA的简易医院呼叫系统实现

1.软件版本

quartusii12.1

2.系统设计概述

       设计一个FPGA对LED进行静态和动态显示的数字时钟控制NBW-8路主机可接8个分机的系统。根据系统设计要求,系统的组成如框图,包括主机FPGA对LED进行静态和动态显示的数字时钟控制程序,以及各个分机电路模板。

系统具有以下功能:

1.主机有LED显示:主机采用显示屏,可显示护理级别,系统状态。主机面板有16/8个双色LED指示灯,可显示每个分机的工作状态。

2.不间断呼叫:主机可显示多路分机的呼叫,并记忆保持。

3.二级护理:可在主机上设计护理级别,有高级和普通二种护理级别。

4.并机功能:主机有并功能,同一台主机可并多台主机,实现多极管理。

5.各分机与门灯连接。

系统包括LED显示屏电路模板,路选分机开关,路选分机指示灯等。接好线再检查确保无误后,打开主机电源,主机自动进入对分机的检查状态,主机从1号机开始检测:分机正常显示等闪亮一下,如某路分机有故障或该路未接分机,则相应的路选指示灯亮绿色保持,对全部的16/8路分机检测,检测完毕后,保持亮绿色的指示灯5秒再熄灭。检测完毕,主机自动回到待机状态。

主机采用FPGA对LED进行静态和动态显示的数字时钟控制程序,和所有分机相连接。分机只需一条两芯总线和主机上的端口相连,可按手持呼叫器上的CALL键或分机上的呼叫/解除键呼叫主机。门灯一般安装在该病房门外,以便于走廊中的护士观察;病床呼叫护士站时,该病房的门灯闪亮。病床解除呼叫或护士对讲时,该病房门外的等熄灭。

系统设计要求:设计一个FPGA对LED进行静态和动态显示的数字时钟控制NBW-8路主机可接8个分机的系统,具有以下功能:

1.主机有LED显示:主机采用显示屏,可显示护理级别,系统状态。主机面板有16/8个双色LED指示灯,可显示每个分机的工作状态。

2.不间断呼叫:主机可显示多路分机的呼叫,并记忆保持。

3.二级护理:可在主机上设计护理级别,有高级和普通二种护理级别。

4.并机功能:主机有并功能,同一台主机可并多台主机,实现多极管理。

5.各分机与门灯连接。

接好线再检查确保无误后,打开主机电源,主机自动进入对分机的检查状态,主机从1号机开始检测:分机正常显示等闪亮一下,如某路分机有故障或该路未接分机,则相应的路选指示灯亮绿色保持,对全部的16/8路分机检测,检测完毕后,保持亮绿色的指示灯5秒再熄灭。检测完毕,主机自动回到待机状态。

3.部分源码

4.1 分机模块设计

由于本课题并没有具体要求设计分机模块,所以在这里我们只设计其基本功能,即当分机出现错误的时候,分机像主机发出信号,告诉主机某个分机发生错误。其主要代码如下:

input clk;

input rst;

input in;

output out;

reg out;

always @(posedge clk or negedge rst)

begin

     if(!rst)

     out<=1'b0;

else out<=in;

end

当我们模拟分机发生错误的时候,只要在输入信号输入一个信号,那么分机就可以像主机发出出错的指令,告诉主机发生错误。改模块比较简单,这里不做具体的介绍了。

4.2 LDE指示灯设计

    本系统LED设计采用红绿双LED显示模式,当用户发出求救信号的时候,那么在显示端红色LED显示,说明某个分机发出求救信号,而当某个分机发生错误的时候,则绿色LED亮,告诉总机某个分机发生错误。

其中用户请求显示模块设计如下:

always @(posedge clk or negedge rst)

begin

     if(!rst)

     begin

     led_red<=1'b0;

     end

else begin

     if(require==1'b1)  //接收到一个请求信号

     led_red<=1'b0;   //红灯亮,说明有请求信号

     else

     led_red<=1'b1;   //红灯不亮,说明没有请求信号

     end

end

当求救信号require发出信号的时候,红色LED信号led_red变低电平,说明某个分机有求救信号。而没有require信号的时候,则led_red信号不显示。

显示分机状态的模块设计如下:

else if(en==1'b1)

     begin

          if(end_check==1'b0)

          begin  

               if(led_flag==1'b0)led_green<=1'b0;

          else

               led_green<=1'b0;

          end

     else begin

               if(led_flag==1'b0)led_green<=1'b1;

          else

               led_green<=1'b0;

          end

     end

else if(en==1'b0)

     begin

               if(end_check==1'b0)

          begin  

               if(led_flag==1'b0)led_green<=1'b1;

          else

               led_green<=1'b0;

          end

     else begin

               if(led_flag==1'b0)led_green<=1'b1;

          else

               led_green<=1'b0;

          end

     end

在这个程序段中有很多信号在之前没有具体讨论过,我们将在最后的核心控制模块中介绍,这里仅仅介绍led_green的情况,当主机扫描到某个分机的时候,如果分机正确,那么在扫描这个分机的时候,绿色LED则亮一下,说明这个分机是正确的,如果分机出现错误,那么这个绿色LED将一直亮下去,知道总机完成所有的分机扫描才熄灭。

4.3 总控制器设计

首先要接收八个分机的错误使能信号,具体设计如下,我们只要调用分机模块就可以了:

fenji fenji_u0(

              .clk  (clk),

              .rst  (rst),

              .in   (err[0]),

              .out  (err_signal[0])

              );

…………………………

fenji fenji_u7(

              .clk  (clk),

              .rst  (rst),

              .in   (err[7]),

              .out  (err_signal[7])

              );

通过以上的程序,我们可以得到来自分机的错误使能信号。

下面介绍总控制器是如何工作的,具体的代码如下:

case(cnt)

     4'b0001:begin 

            if(err_signal[0]==1'b1)

            begin flag[0]<=1'b0;flag[7:1]<=flag[7:1];end//have no problem

            else

            begin flag[0]<=1'b1;flag[7:1]<=flag[7:1];end//have some problem               

            end

……………………………

     4'b1000:begin 

            if(err_signal[7]==1'b1)

            begin flag[7]<=1'b0;end//have no problem

            else

            begin flag[7]<=1'b1;end//have some problem

            end

     default:flag<=flag;

endcase

即当总机接收到错误信号的时候,总机像显示模块发送错误控制信号flag.信号flag是一个8位的并行信号,其每一位信号对应控制着每一个显示模块信号。

剩下的就是系统显示模块,比较简单,这里就不做介绍了。

4.仿真结论

图2 系统仿真图1

从上面的图我们可以看到,我们模拟分机五发生错误,那么对应的FALG信号将将在主机扫描到第五个分机的时候,FLGA[4]的值变为1,说明分机五发生错误,在总机的显示段,绿色LED将一直显示下去,而其他的LED则仅仅在扫描对应分机的时候才亮。

图3系统仿真图2

这里再给出另一张系统仿真图,当多个分机发生错误的时候,我们发现对应的绿色LED也做出正确的判别,可见系统是正确的。

当分机系统发出错误使能信号的时候,当总机检测到错误信号的时候,如果分机发出了错误使能信号err_signal的时候,flag[0]信号则发出0,而其他位的信号保持不变:flag[7:1]<=flag[7:1]。如果没有检测到错误使能信号err_signal,则flag[0]信号则发出1,而其他位的信号保持不变:flag[7:1]<=flag[7:1]。扫描完第一个分机后再扫描后面的分机,具体工作原理相同。

当扫描完所有的分机以后,发出end_check信号,说明总机已经完成了所有的分机扫描工作。

以上就是基于FPGA的医疗呼叫系统的主要模块实现。A02-30

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/125341155