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則僅僅在掃描對應分機的時候才亮。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SO3MzMzUDOzcDNkZWNjNDNzYzXxAzMxUTMwEzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
圖3系統仿真圖2
這裡再給出另一張系統仿真圖,當多個分機發生錯誤的時候,我們發現對應的綠色LED也做出正确的判别,可見系統是正确的。