一、实验目的:
基本掌握小型数字系统设计;
掌握序列发生器、序列检测器的设计方法。
二、实验任务:
设计序列发生器、序列检测器。
三、实验要求:
1.用HDL设计序列发生器,产生一个8位的序列信号,序列码:1010+学号末位数(0)的BCD码。
2.用HDL设计序列检测器
a)要求电路对串行输入序列进行检测,当连续检测到4个码元符合检测器的检测码(如:1101)时,检测器输出为1;
b)对串行输入序列101110101101101001011进行检测,记录检测结果;
c)前一个序列的最后一个码元,不能作为本次1101序列的码元。
四、实验设计说明:
构成序列信号发生器的方法有多种,一种比较简单、直观的方法是用计数器和数据选择器组成。例如,需要产生一个8位的序列信号,则可以用一个八进制计数器和一个8选1数据选择器组成。另一个比较常见的方法是采用带反馈逻辑电路的移位寄存器。如果序列信号的位数为m,移位寄存器的位数为n,则应取2n≥m。例如,若仍然要求产生一个8位的序列信号,则可以用一个3位的移位寄存器加上反馈逻辑电路构成所需的序列发生器(见下图),其对应的特征多项式为:
其中,可以用异或门实现模二加运算,D触发器作为延时单元。
序列检测器可以根据检测序列画出状态转换图,然后用移位寄存器(3位!)、时序电路设计方法设计,也可以用有限状态机实现。
五、实验步骤
用HDL设计序列发生器
module test1(clk, rst, din, dout);
I nput clk, rst;
output [2:0] din;
output dout;
reg dout;
reg [2:0] din;
always@(posedge clk or posedge rst)
if(rst) //置零
begin
dout<=0;
din<=0;
end
else
begin
case(din) //利用位宽判断序列码
0:dout<=1;
1:dout<=0;
2:dout<=1;
3:dout<=0;
4:dout<=0;
5:dout<=0;
6:dout<=0;
7:dout<=0;
endcase
din<=din+1;
end
Endmodule
用HDL设计序列检测器
module test2(clk, rst, test, dout);
input clk, rst;
output [3:0] test;
output dout;
reg dout;
reg [3:0] test;
always@(posedge clk )
begin //左移/右移(设置引脚决定移动方向)
test[1]<=test[0];
test[2]<=test[1];
test[3]<=test[2];
test[0]<=test[3];
test[0]=rst;
if((test[3]==1)&&(test[2]==1)&&(test[1]==0)&&(test[0]==1)) //判断检测码
dout=1; //检测码正确
else
dout=0; //非检测码
end
endmodule