4级m序列发生器设计参考
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3级m序列发生器设计方案
图2.2 七位反馈移位移存器
方案一:
根据图2.2的结构模型,对于级数为n=3的m序列,可设置四个寄存器,将寄存器0和寄存器1进行异或运算,把结果赋给寄存器3。然后将寄存器2,1,0右移一位。再将寄存器3赋给寄存器2。这样就不会产生数据覆盖。最后把寄存器0输出。同理可得15位m序列,级数n=4的verilog建模思路。
方案二:
由于7位m序列1110010可用三位二进制7种状态表示,因此可用Moore有限状态机的行为进行建模方法。Moore有限状态机,其输出值只取决于当前状态,与输入值无关。可以通过在always语句块内使用case语句来实现,在每个case分支都应当有输出值及状态转换。设状态A=3'b111,B=3'b011,C=3'b001,D=3'b100,E=3'b010,F=3'b101,G=3'b110;它们的转换关系图如图2.3:
图 2.3 m序列发生器的状态转移图
方案一的程序比方案二简洁,方案二的思路比方案一更明白。二者的各有千秋。
4级m序列及其Manchester编码
module manchester_encodingnew(enc_data,m_test,clk);
parameter BYTE_WIDTH=8;
input clk;
output enc_data;
output m_test;
reg phase;
reg busy;
wire clkr;
wire enc_data;
reg [2:0] bit_count;
reg reg_data;
reg Data_CLKT,Buff;
reg [3:0]m_Buff;
assign clkr=clk;
initial
begin
Data_CLKT=0;
busy=0;
phase=0;
bit_count=0;
end
always@(posedge clkr)
begin
Data_CLKT=~Data_CLKT;
end
always@ (posedge clkr)
begin
phase=~phase;
end
always@ (posedge clkr)
begin
if((bit_count==BYTE_WIDTH-1)&&phase)
busy=0;
else
busy=1;
end
always@(posedge clkr)
begin
if(phase&&busy)
bit_count=bit_count+1;
end
always@ (posedge clkr)
begin
if(phase&&busy)
begin
Buff=m_Buff[1]^m_Buff[0]^(m_Buff==0);
m_Buff[0]=m_Buff[1];
m_Buff[1]=m_Buff[2];
m_Buff[2]=m_Buff[3];
m_Buff[3]=Buff;
end
end
always@ (posedge clkr)
begin
reg_data=m_Buff[0];
end
assign m_test=reg_data;
assign enc_data=reg_data^~phase;
endmodule