在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2051|回复: 1

[求助] 40位曼彻斯特解码vhdl求答疑

[复制链接]
发表于 2016-5-22 15:54:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 petrel87 于 2016-5-22 16:00 编辑

代码的一部分贴上,问题在代码下面:



  1. process(reset,clkMuxx,mdi,filterok,filterok_delay,mdi_r,mdi_r_filterok,rxf,rxf_r,mdi_xor_active,s_data_active)
  2.         begin

  3.                 if rising_edge(clk) then
  4.                          -- filter  data
  5.                                 rxf <= rxf(2 downto 0) & mdi;
  6.                             if ((rxf(3) & rxf(3) & rxf(3)) = rxf(2 downto 0)) then
  7.                              filterok <= rxf(3);
  8.                             end if;
  9. --消息是前6位同步头111000,或者000111这样的,然后是32位的消息体
  10. --以上看起来是同步头过滤的作用,但我不理解了,rxf初始值是0000的话,永远不会出现1111啊!--曼彻斯特码除了同步头,内部消息不可能再出现3个以上连起来的111或者000了,这样filterok就永远不变


  11.                                rxf_r <= rxf_r(2 downto 0) & mdi_r;
  12.                             if ((rxf_r(3) & rxf_r(3) & rxf_r(3)) = rxf_r(2 downto 0)) then
  13.                              r_filterok <= rxf_r(3);
  14.                             end if;

  15.                                rxf_xor <= rxf_xor(0) & mdi_xor_active;
  16.                             if ((rxf_xor(1) & rxf_xor(1)) = rxf_xor(1 downto 0)) then
  17.                              xor_filterok <= rxf_xor(1);
  18.                             end if;

  19.                            
  20.                                 end if;

  21.                              filterok_delay <= filterok;--filterok因为没值,filterok_delay也不会有值

  22.                 end if;
  23.                 tick <= filterok xor filterok_delay;
  24. --这个看来是脉冲边沿检测,但看来是值不会变了???

  25.                 if reset = '0' then
  26.                         line_active <= '0';
  27.                         rxf <= (others => '0');
  28.                         rxf_r <= (others => '0');
  29.                         filterok <= '0';
  30.                         r_filterok <= '0';
  31.                         s_data_active        <= (others => '0');
  32.                         xor_filterok <= '0';
  33.                         rxf_xor <= (others => '0');
  34.                 end if;

  35.         end process;

  36.         -- decode1m
  37.         decode_proc:
  38.         process(tick,clk,filterok,filterok_delay,line_active,reset, clk_1m,DataBit_cnt_width,
  39.                 decode_word_flag,bit_cnt_recv,decode_state,dout_wr_cnt_delay,HalfBit_cnt_width)

  40.             variable parity_v                         : std_logic;

  41.         begin

  42.             if rising_edge(clkMuxx) then

  43.         

  44.                         HalfBit_cnt_width <= 0;
  45.                         if (tick ) = '0' then          --record bit gap time
  46.                                         HalfBit_cnt_width <= HalfBit_cnt_width + 1;
  47. --最终问题来了,这个Halbit将会一直+1了,因为tick永远是初值0.。。。求哪位大神给我解惑
  48.                         end if;


复制代码
 楼主| 发表于 2016-5-22 16:37:46 | 显示全部楼层
怎么看tick也不可能变1.而tick变1很重要啊
况且,真没看出来怎么过滤同步头的,还起名叫filter....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 11:24 , Processed in 0.019652 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表