5.1 實 驗 目 的
(1) 了解通信領(lǐng)域中經(jīng)常使用的巴克碼檢測器的設(shè)計方法。
(2) 掌握使用狀態(tài)機(jī)設(shè)計時序電路的方法。
5.2 實 驗 儀 器 與 器 材
(1) EDA 開發(fā)軟件 一 套
(2) 微 機(jī) 一 臺
(3) 實驗開發(fā)系統(tǒng) 一 臺
(4) 打印機(jī) 一 臺
(5) 其他器件與材料 若 干
5.3 實 驗 說 明
巴 克 碼 檢 測 在 數(shù) 據(jù) 通 信 、 雷 達(dá) 和 遙 控 等 領(lǐng) 域 中 用 于 檢 測 同 步 識 別 標(biāo) 志 , 它 是 一 種用來檢測一組或多組序列信號的電路。本實驗中的巴克碼檢測器可使用多種方法 實 現(xiàn) ,為 了 更 好 地 掌 握 HDL 的 使 用 方 法 ,建 議 同 學(xué) 們 使 用 狀 態(tài) 機(jī) 進(jìn) 行 設(shè) 計 ,實 驗 中 檢測的串行碼組可用脈沖按鍵輸入,輸出的檢測結(jié)果由發(fā)光二極管或數(shù)碼管指示, 巴克碼檢測器示意圖如圖 5.1 所示。
5.4 實 驗 要 求
(1) 設(shè) 計 一 個 巴 克 碼 檢 測 器 , 當(dāng) 檢 測 器 連 續(xù) 收 到 一 組 串 行 碼 {1110010}后 , 其 輸 出 為 1,其余碼組輸出為 0;
(2) 對設(shè)計的巴克碼檢測器進(jìn)行仿真驗證;
?(3) 下載并用實驗開發(fā)系統(tǒng)驗證。
5.5 實 驗 報 告 要 求
?(1) 寫出設(shè)計過程和源文件;
module buc_devider(clk, rst, din, valid, threshold);
? input clk;
? input rst;
? input din;
? input [2:0] threshold;
? output valid;
? wire [6:0] data_buc;
? wire [2:0] threshold;
? buc_dev U1(.din_buc(data_buc), .threshold(threshold), .valid(valid));
? buc_recieve U2(.clk(clk), .rst(rst), .din(din), .dout_buc(data_buc));
endmodule
// 數(shù)據(jù)接收模塊
module buc_recieve(clk, rst, din, dout_buc);
? input clk;
? input rst;
? input din;
? output [6:0] dout_buc;
? reg [6:0] dout_buc;
? always @(posedge clk)
??? if (!rst)
????? dout_buc <= 7'b0;
??? else
????? dout_buc <= {dout_buc[6:0], din};
endmodule
// 巴克碼檢測模塊
module buc_dev(din_buc, threshold, valid);
? parameter LENGTH = 7;
? parameter BUC = 7'b1110010;
?
? input [6:0] din_buc;
? input [2:0] threshold;
? output valid;
? reg valid;
? reg [2:0] sum;
? integer i;
? always @(din_buc)
? begin
??? sum <= 0;
??? for (i = 0; i < LENGTH; i = i + 1)
????? if (din_buc[i] == BUC[i])
??????? sum <= sum + 1;
? end
? always @(sum)
? begin
??? if (sum >= threshold)
????? valid = 1;
??? else
????? valid = 0;
? end
endmodule
測試代碼:
`timescale 1ns/1ns
module bkjtb;
? reg clk;
? reg rst;
? reg din;
? reg[2:0] threshold;
? wire valid;
?bkjtb dut (
??? .clk(clk),
??? .rst(rst),
??? .din(din),
??? .valid(valid),
??? .threshold(threshold)
? );
? `timescale 1ns/1ns;?
module buc_devider_tb;?
reg clk, rst, din;?
reg[2:0] threshold;?
reg[6:0] data;??
initial?
? begin?
???? clk = 1'b0;?
???? forever?
???? #10 clk = ~clk;?
?? end?
???
initial?
? begin?
???? rst = 1'b0;?
??? #5 rst = 1'b1;?
? end?
???
initial?
?? begin?
??? data = 7'b1110010;?
??? threshold = 3'b101;
?????? end?
???
?? integer i;?
?? always@(posedge clk or negedge rst)?
? if(!rst)???
????? begin?
??????? din = 1'b0;?
??????? i = 10;?
?????? end?
?? else?
????
?????? ? begin
?????? ? if(i == 0)?
???????? begin?
????????? din = data[i];?
???????? i = 6;?
??????? end?
????? else?
??????? begin?
?????????? din = data[i];
????????? i = i - 1;?
??????? end?
?? end?
buc_devider v1(.clk(clk), .rst(rst), .din(din), .valid(valid), .threshold(threshold));?
?endmodule
當(dāng)遇到
![]() |
1110010時,會輸出1,在再次接收到一段序列時再次變?yōu)?,經(jīng)檢測后再發(fā)生變化。文章來源:http://www.zghlxwxcb.cn/news/detail-790668.html
實驗心得:巴克碼檢測器輸入是一位序列,需要先移至移位寄存器中,再將移位寄存器中的值與標(biāo)準(zhǔn)巴克碼同或,通過判斷同或值是否大于閾值來確定巴克碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-790668.html
到了這里,關(guān)于實驗 5 巴克碼檢測器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!