大家好,
我是按照xilinx提供的曼彻斯特编码方式根据自己的情况编写出的编码电路,modelsim仿真出现毛刺。
我认为是xilinx的编码策略不好。官网的之所以没出现毛刺是因为组合逻辑的不确定性。请问是不是呢?还是我哪里搞错了呢?
如果有好点的曼彻斯特编译码策略或代码还请赐教?非常感谢!
xilinx的曼彻斯特编码:
always @(posedge rst or posedge clk16x)
begin
if (rst)
tbr <= 8'h0 ;
else if (wrn1 == 1'b1 && wrn2 == 1'b0) //下降沿得到要编码的8位数据
tbr <= din ;
end
always @(posedge rst or posedge clk16x)
begin
if (rst)
clkdiv <= 4'b0000 ;
else if (clk1x_enable == 1'b1)
clkdiv <= clkdiv + 1 ;
end
assign clk1x = clkdiv[3] ; //曼码时钟
always @(posedge rst or posedge clk1x)
begin
if (rst)
tsr <= 8'h0 ;
else if (no_bits_sent == 4'b0001)
tsr <= tbr ;
else if (no_bits_sent >= 4'b0010 && no_bits_sent < 4'b1010)
begin
tsr[7:1] <= tsr[6:0] ;
tsr[0] <= 1'b0 ;
end
end
assign mdo = tsr[7] ^ clk1x ; //曼码输出
我的代码:
always @(posedge clk or posedge rst)
begin
if(rst)
cnt <= 0;
else
cnt <= cnt + 1'b1;
end
always @(posedge clk or posedge rst)
begin
if(rst)
clk_16div <= 0;
else
clk_16div <= cnt[3];
always @(posedge clk_16div or posedge rst)
begin
if(rst)
shift_reg <= 1'b0;
else if(trans_data_reg)
shift_reg <= data;
else if(manch_en)
begin
shift_reg[15:1] <= shift_reg[14:0] ;
shift_reg[0] <= 1'b0;
end
end
assign m_out = shift_reg[15] ^ clk_16div;
我的代码仿真如图:
|