打印
[FPGA]

仿用xilinx官方曼彻斯特编码出现毛刺

[复制链接]
1200|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大家好,
     我是按照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;
我的代码仿真如图:

相关帖子

沙发
zhaojingzb| | 2014-7-30 17:34 | 只看该作者
两个代码中都有行波时钟,这个最好不要使用。
应该就是组合逻辑出来的毛刺。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
502593045 + 1 赞一个!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

54

帖子

2

粉丝