5.1 实 验 目 的
(1) 了解通信领域中经常使用的巴克码检测器的设计方法。
(2) 掌握使用状态机设计时序电路的方法。
5.2 实 验 仪 器 与 器 材
(1) EDA 开发软件 一 套
(2) 微 机 一 台
(3) 实验开发系统 一 台
(4) 打印机 一 台
(5) 其他器件与材料 若 干
5.3 实 验 说 明
巴 克 码 检 测 在 数 据 通 信 、 雷 达 和 遥 控 等 领 域 中 用 于 检 测 同 步 识 别 标 志 , 它 是 一 种用来检测一组或多组序列信号的电路。本实验中的巴克码检测器可使用多种方法 实 现 ,为 了 更 好 地 掌 握 HDL 的 使 用 方 法 ,建 议 同 学 们 使 用 状 态 机 进 行 设 计 ,实 验 中 检测的串行码组可用脉冲按键输入,输出的检测结果由发光二极管或数码管指示, 巴克码检测器示意图如图 5.1 所示。
5.4 实 验 要 求
(1) 设 计 一 个 巴 克 码 检 测 器 , 当 检 测 器 连 续 收 到 一 组 串 行 码 {1110010}后 , 其 输 出 为 1,其余码组输出为 0;
(2) 对设计的巴克码检测器进行仿真验证;
(3) 下载并用实验开发系统验证。
5.5 实 验 报 告 要 求
(1) 写出设计过程和源文件;
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
// 数据接收模块
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
当遇到
1110010时,会输出1,在再次接收到一段序列时再次变为0,经检测后再发生变化。文章来源:https://www.toymoban.com/news/detail-790668.html
实验心得:巴克码检测器输入是一位序列,需要先移至移位寄存器中,再将移位寄存器中的值与标准巴克码同或,通过判断同或值是否大于阈值来确定巴克码。文章来源地址https://www.toymoban.com/news/detail-790668.html
到了这里,关于实验 5 巴克码检测器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!