天天看點

【醫院呼叫系統】基于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則僅僅在掃描對應分機的時候才亮。

【醫院呼叫系統】基于FPGA的簡易醫院呼叫系統實作

圖3系統仿真圖2

這裡再給出另一張系統仿真圖,當多個分機發生錯誤的時候,我們發現對應的綠色LED也做出正确的判别,可見系統是正确的。

繼續閱讀