搜索
bottom↓
回复: 37

EPM240 求助!

[复制链接]

出0入0汤圆

发表于 2012-3-24 09:56:22 | 显示全部楼层 |阅读模式
我想用EPM240实现以下功能:
输入:
BJ    1位
Input 21位

输出

Output 21位

逻辑

如果BJ==1
      Output=Input

如果BJ==0
     从低位查找输入中0的位置,根据0的位置输出。
      例如:如果输入为XXXXXXXXXXXXXXXXXXXX0 则输出111111111111111111100其中X为任意值
                     如果输入为XXXXXXXXXXXXXXXXXX011 则输出111111111111111110011其中X为任意值

输入数据的变化频率比较低,可以不用考虑。
要求输出的信号为稳定的0V或者 3.3V,不能是脉冲。

小弟新手,也按照这逻辑写了代码,但是输出不稳定,有些输出是脉冲。论坛有朋友告诉我需要时序,我就不懂了。希望能做的大侠帮个忙!
另外因为这是公司的事,小弟可以申请个几百块的费用(不过多了就不行了:( ),有哪位大侠有兴趣留个联系方式:handshake ,感激不尽!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-3-24 10:00:05 | 显示全部楼层
请大家一定帮帮忙啊!!!!我被蹂躏好几天了:'(:'(:'(

出0入0汤圆

发表于 2012-3-24 10:38:21 | 显示全部楼层
本帖最后由 huatong 于 2012-3-24 10:39 编辑

不知道这样可以吗?
  1. module help(clk,bj,in,out);
  2. input clk;
  3. input bj;
  4. input [20:0] in;
  5. output reg [20:0] out;

  6. initial begin
  7.         out=21'hz;
  8. end

  9. always@(posedge clk) begin
  10.         out<=in;
  11.         if(!bj) begin
  12.                 if(!in[0])
  13.                         out[1]<=1'b0;
  14.                 else if(!in[1])
  15.                         out[2]<=1'b0;
  16.                 else if(!in[2])
  17.                         out[3]<=1'b0;
  18.                 else if(!in[3])
  19.                         out[4]<=1'b0;
  20.                 else if(!in[4])
  21.                         out[5]<=1'b0;
  22.                 else if(!in[5])
  23.                         out[6]<=1'b0;
  24.                 else if(!in[6])
  25.                         out[7]<=1'b0;
  26.                 else if(!in[7])
  27.                         out[8]<=1'b0;
  28.                 else if(!in[8])
  29.                         out[9]<=1'b0;
  30.                 else if(!in[9])
  31.                         out[10]<=1'b0;
  32.                 else if(!in[10])
  33.                         out[11]<=1'b0;
  34.                 else if(!in[11])
  35.                         out[12]<=1'b0;
  36.                 else if(!in[12])
  37.                         out[13]<=1'b0;
  38.                 else if(!in[13])
  39.                         out[14]<=1'b0;
  40.                 else if(!in[14])
  41.                         out[15]<=1'b0;
  42.                 else if(!in[15])
  43.                         out[16]<=1'b0;
  44.                 else if(!in[16])
  45.                         out[17]<=1'b0;
  46.                 else if(!in[17])
  47.                         out[18]<=1'b0;
  48.                 else if(!in[18])
  49.                         out[19]<=1'b0;
  50.                 else if(!in[19])
  51.                         out[20]<=1'b0;
  52.         end
  53. end

  54. endmodule
复制代码

出20入186汤圆

发表于 2012-3-24 10:44:44 | 显示全部楼层
如果BJ==0
     从低位查找输入中0的位置,根据0的位置输出。
      例如:如果输入为XXXXXXXXXXXXXXXXXXXX0 则输出111111111111111111100其中X为任意值
                     如果输入为XXXXXXXXXXXXXXXXXX011 则输出111111111111111110011其中X为任意值



没看出来啥规律

出0入0汤圆

发表于 2012-3-24 10:48:48 | 显示全部楼层
yuyu87 发表于 2012-3-24 10:44
没看出来啥规律

在第一个出现0的位置的下一个位置输出0

出20入186汤圆

发表于 2012-3-24 10:50:31 | 显示全部楼层
huatong 发表于 2012-3-24 10:48
在第一个出现0的位置的下一个位置输出0

打了一份CPLD驱动LCD的板,明天正式开始学习CPLD

你做的板子很漂亮,致敬~

出0入0汤圆

 楼主| 发表于 2012-3-24 11:00:56 | 显示全部楼层
首先感谢回复!
我感觉逻辑似乎不是我想要的,逻辑上输出只与第一个0的位置相关,而且输出一定只有两个连续的0

XXXXXXXXXXXXXXXXXXXX0 输出111111111111111111100     其中X为任意值,即一旦有0,则后续的值不再考虑
XXXXXXXXXXXXXXXXXXX01 输出111111111111111111001     
XXXXXXXXXXXXXXXXXX011 输出111111111111111110011     
XXXXXXXXXXXXXXXXX0111 输出111111111111111100111  
XXXXXXXXXXXXXXXX01111 输出111111111111111001111   
依次类推

我用过casez但输出有脉冲,不稳定

而且直接 Out<=In都不能稳定的输出,有些输出的管脚是脉冲!

个人认为:
EPM240在一个时钟周期内执行的逻辑有限,所以需要将逻辑分开,小弟水平不行,不知道如何分开。
另外有些管脚输出脉冲的原因,是否因为在一个时钟周期内逻辑没执行完,而下一个周期又重新执行,导致的输出不稳定呢?

出0入0汤圆

发表于 2012-3-24 11:01:05 | 显示全部楼层
本帖最后由 huatong 于 2012-3-24 11:01 编辑
yuyu87 发表于 2012-3-24 10:50
打了一份CPLD驱动LCD的板,明天正式开始学习CPLD

你做的板子很漂亮,致敬~


谢谢,可惜程序还没有写通.

出20入186汤圆

发表于 2012-3-24 11:03:22 | 显示全部楼层
个人认为:
EPM240在一个时钟周期内执行的逻辑有限,所以需要将逻辑分开,小弟水平不行,不知道如何分开。


有限?汗~ :L

出0入0汤圆

发表于 2012-3-24 11:04:37 | 显示全部楼层
frjwdcyd 发表于 2012-3-24 11:00
首先感谢回复!
我感觉逻辑似乎不是我想要的,逻辑上输出只与第一个0的位置相关,而且输出一定只有两个连续 ...

应该没有错吧,只是考虑第一个0的位置,后面的都不处理啊,是if()完第一个0,后面的的就不处理了,而且一定是2个0啊(第一个出现0的位置及它的下一位与是0)

出0入0汤圆

发表于 2012-3-24 11:11:59 | 显示全部楼层
明白了,原来后面都要是1,那改一下就可以了

出0入4汤圆

发表于 2012-3-24 11:55:02 | 显示全部楼层
试试这个,随便改改不许笑啊
module help(input bj,input [20:0]in,output reg [20:0]out);
always@(bj or in) begin
        if(bj)out<=in;
        else  begin
                if(!in[0])
                        out<=21'b111111111111111111100;
                else if(!in[1])
                        out<=21'b111111111111111111001;
                else if(!in[2])
                        out<=21'b111111111111111110011;
                else if(!in[3])
                        out<=21'b111111111111111100111;
                else if(!in[4])
                        out<=21'b111111111111111001111;
             .......
                else if(!in[19])
                        out<=21'b001111111111111111111;
                else if(!in[20])
                        out<=21'b011111111111111111111;
                         else
                        out<=21'b111111111111111111111;

        end
end

endmodule

出0入0汤圆

 楼主| 发表于 2012-3-24 11:59:28 | 显示全部楼层
huatong 发表于 2012-3-24 11:11
明白了,原来后面都要是1,那改一下就可以了

我以前和你写的差不多,类似
         if(!in[0])

                        out<=21'b111111111111111111100;

                else if(!in[1])

                        out<=21'b111111111111111111001;

                else if(!in[2])

                        out<=21'b111111111111111110011;

                else if(!in[3])

                        out<=21'b111111111111111100111;

                else if(!in[4])

                        out<=21'b111111111111111001111;
               。。。。。。
out的前7位输出还比较稳当,但是第8位以后输出的的是脉冲,很不稳定!我也不知道是什么原因。

出0入0汤圆

 楼主| 发表于 2012-3-24 12:05:12 | 显示全部楼层
而且最奇怪的是,整个程序只一句

out<=in;

都不能稳定输出,现象是out的前7位输出比较稳定(0或者3.3v),但是从第8位开始 有些管脚输出的的是脉冲,很不稳定!

出0入8汤圆

发表于 2012-3-24 12:05:46 | 显示全部楼层
本帖最后由 kebaojun305 于 2012-3-24 12:21 编辑

要注意点  cPLD是 并行执行的  这 几个判断是同时执行的(导致你的输出有几个值是同时输出的 看布线的延时 这个就是冲突 )   估计就是这样原因才产生的毛刺  应该加个缓冲寄存器  先判断最低得那个0 然后把其他位都设置成固定的数字  最好在根据这个值 输出。就不会有毛刺了。      这个写法  要保证输入的数据只有1个0 其他的都是1  输出应该是对的  如果有2个0以上的输入数据 就会有毛刺输出。



你看看综合出来的RTL图  估计更好看出问题。

出0入4汤圆

发表于 2012-3-24 12:12:17 | 显示全部楼层
如果是信号有毛刺,就是各个逻辑信号因为延时差异产生竞争,如果能加个时钟,就好办多了

出0入0汤圆

 楼主| 发表于 2012-3-24 12:20:57 | 显示全部楼层
kebaojun305 发表于 2012-3-24 12:05
要注意点  cPLD是 并行执行的  这 几个判断是同时执行的(导致你的输出有几个值是同时输出的 看布线的延时  ...

能帮忙做个简单的例子吗,新手:L

“先判断最低得那个0 然后把其他位都设置成固定的数字”这个貌似有点难,21位的组合量太大了。

而且我做个试验类似

case (in)

111111111111111111110 out<=21'b111111111111111111100
......

当in为4位时,能稳定输出,当in为16位时,输出就有脉冲了。


所以我认为EPM240是每个时钟周期进行一次计算,每次计算完都输出。

出0入0汤圆

 楼主| 发表于 2012-3-24 12:22:33 | 显示全部楼层
thxcai2 发表于 2012-3-24 12:12
如果是信号有毛刺,就是各个逻辑信号因为延时差异产生竞争,如果能加个时钟,就好办多了 ...

输入中可以加入时钟

出0入0汤圆

发表于 2012-3-24 12:23:13 | 显示全部楼层
frjwdcyd 发表于 2012-3-24 12:05
而且最奇怪的是,整个程序只一句

out

很奇怪啊,我这里看不出有毛刺啊.

出0入8汤圆

发表于 2012-3-24 12:23:53 | 显示全部楼层
本帖最后由 kebaojun305 于 2012-3-24 12:24 编辑
frjwdcyd 发表于 2012-3-24 12:20
能帮忙做个简单的例子吗,新手

“先判断最低得那个0 然后把其他位都设置成固定的数字”这个貌似有点 ...


首先  你要吧输入的数据的处理下  把它处理成只有1个0的数据(比如 输入 11011011  你要处理成 1111011)  其他的数据都是1  然后再用上面的程序判断输出  就不会有毛刺了。

出0入0汤圆

 楼主| 发表于 2012-3-24 12:27:12 | 显示全部楼层
kebaojun305 发表于 2012-3-24 12:23
首先  你要吧输入的数据的处理下  把它处理成只有1个0的数据(比如 输入 11011011  你要处理成 1111011) ...

多谢!
我试试。
不能在一个CPLD中处理完所有逻辑吗?不想再改当前的电路了:L

出0入8汤圆

发表于 2012-3-24 12:28:44 | 显示全部楼层
huatong 发表于 2012-3-24 12:23
很奇怪啊,我这里看不出有毛刺啊.

按我回复的  红色字体的方法试试。看看有没有毛刺

出0入8汤圆

发表于 2012-3-24 12:29:42 | 显示全部楼层
本帖最后由 kebaojun305 于 2012-3-24 12:30 编辑
frjwdcyd 发表于 2012-3-24 12:27
多谢!
我试试。
不能在一个CPLD中处理完所有逻辑吗?不想再改当前的电路了  ...


就是在CPLD中完成啊。要不你还想加数字电路了:L   那么你用CPLD干么呢。:L

出0入8汤圆

发表于 2012-3-24 12:31:48 | 显示全部楼层
本帖最后由 kebaojun305 于 2012-3-24 12:48 编辑
frjwdcyd 发表于 2012-3-24 12:27
多谢!
我试试。
不能在一个CPLD中处理完所有逻辑吗?不想再改当前的电路了  ...


你按我回复的红色字体部分仿真下 应该是能仿真到毛刺的。   主要是思路出问题了  拿单片机的顺序执行来套CPLD的并行执行。

出0入0汤圆

 楼主| 发表于 2012-3-24 20:08:17 | 显示全部楼层
kebaojun305 发表于 2012-3-24 12:31
你按我回复的红色字体部分仿真下 应该是能仿真到毛刺的。   主要是思路出问题了  拿单片机的顺序执行来套 ...

的确是单片机顺序执行的思路:L。感觉很简单的逻辑用CPLD实现似乎很复杂!:L
”要保证输入的数据只有1个0“这句大概明白了,是防止因为延时else不能起作用的。
“应该加个缓冲寄存器  先判断最低得那个0”还请kebaojun305 说的再详细点!以前没搞过,看书觉得很简单,可实际一干不是这么回事!



出0入8汤圆

发表于 2012-3-25 09:07:10 | 显示全部楼层
frjwdcyd 发表于 2012-3-24 20:08
的确是单片机顺序执行的思路:L。感觉很简单的逻辑用CPLD实现似乎很复杂!:L
”要保证输入的数据只有1个0 ...

实际上  你这个if else的语句在CPLD中 基本上每一个判断 是同时进行的(只是有个布线的延时而已,而且输出也是 如果输入有几个零 那么对应的有几个0的输出  至于先后也是布线的延时 所以实际上输出是有冲突的 而且还很费电)  而不是单片机的顺序执行。所以 结果出错了   我暂时想到的办法就是加驱动时钟  用2个或以上的周期 来处理这个数据并输出结果   用组合逻辑 我还没有想到办法。

出0入0汤圆

 楼主| 发表于 2012-3-25 09:12:22 | 显示全部楼层
kebaojun305 发表于 2012-3-25 09:07
实际上  你这个if else的语句在CPLD中 基本上每一个判断 是同时进行的(只是有个布线的延时而已,而且输出 ...

能把大概的代码贴下吗?我水平的确

出0入0汤圆

 楼主| 发表于 2012-3-25 09:19:18 | 显示全部楼层
因为输入信号的变换频率非常低,所以感觉应该一段时间后输出会稳定,但现象是一直输出脉冲。
所以我理解epm240每个时钟频率都读入、计算、输出。不知道我的理解对吗?

出0入8汤圆

发表于 2012-3-25 10:09:43 | 显示全部楼层
本帖最后由 kebaojun305 于 2012-3-25 10:18 编辑

如果输入频率变化很慢的  就好处理了  我刚试着写  在调试中   思路就是 使用时钟信号驱动    把输入的21位并行数据转成21位的串行数据  然后从第一位开始判断,如果是0 则退出(判断一次 计数器就加1) 则计数器中的数据就是 最前面0的位置  然后根据这个位置 在用case选择输出  就可以了。  程序写了点  在调试修改中。  我也是刚开始学了快4个月,断断续续的。

出0入8汤圆

发表于 2012-3-25 10:28:05 | 显示全部楼层
frjwdcyd 发表于 2012-3-25 09:19
因为输入信号的变换频率非常低,所以感觉应该一段时间后输出会稳定,但现象是一直输出脉冲。
所以我理解epm ...

至于是不是每个时钟都在输入 计算和输出  要看你的设计   如果你的设计中敏感列表中有时钟信号 或者和时钟相关联的计算结果信号  那么 你的理解是对的   否则则是错的。

出0入8汤圆

发表于 2012-3-25 12:36:26 | 显示全部楼层
本帖最后由 kebaojun305 于 2012-3-25 13:30 编辑
  1. module help(wr,clk,in,out,rst,test,test1);
  2. input clk,rst,wr;
  3. input[20:0] in;
  4. output[20:0] out;
  5. reg[20:0] out;
  6. // test port
  7. output[4:0] test;
  8. wire[4:0] test;


  9. assign test=bit_count;
  10. output test1;
  11. wire test1;
  12. assign test1=bit_det_start;
  13. //test port  end
  14. reg[4:0] bit_count;
  15. reg bit_det_start;//
  16. reg[20:0] in_buff;//
  17. reg r0,r1;

  18. always@(posedge clk or negedge rst)
  19. begin
  20. if(!rst) begin
  21.         r0<=1'b0;
  22.         r1<=1'b0;
  23.         end
  24. else
  25.         begin
  26.                 r0<=wr;
  27.                 r1<=r0;
  28.         end
  29.        

  30. end
  31. wire bit_start;
  32. assign  bit_start=(~r1)&r0;


  33. reg bit_val;
  34. always@(posedge clk or negedge rst )
  35. begin
  36. if(!rst) begin
  37.         bit_count<=5'b00000;
  38.         bit_det_start=1'b0;
  39.         end
  40. else
  41.         begin
  42.                 if(bit_det_start)
  43.                         begin
  44.                                 in_buff=in_buff>>1;
  45.                                 in_buff[20]<=1'b0;
  46.                                 if(in_buff[0])                                       
  47.                                         bit_count<=bit_count+1'b1;
  48.                                 else
  49.                                         begin
  50.                                                 bit_det_start=1'b0;
  51.                                         end
  52.                         end
  53.                 else       
  54.                         begin
  55.                         if(bit_start) begin
  56.                                 bit_det_start<=1'b1;
  57.                                 bit_count<=5'b00000;
  58.                                 in_buff<=in;
  59.                                 end
  60.                         end
  61.         end
  62. end

  63. always @(negedge bit_det_start or negedge rst)
  64. begin
  65. if(!rst)
  66.         out<=21'b000000000000000000000;
  67. else
  68.         case(bit_count)
  69.          5'd0:  out<=21'b111111111111111111100;
  70.          5'd1:  out<=21'b111111111111111111001;
  71.          5'd2:  out<=21'b111111111111111110011;
  72.          5'd3:  out<=21'b111111111111111100111;
  73.          5'd4:  out<=21'b111111111111111001111;
  74.          5'd5:  out<=21'b111111111111110011111;
  75.          5'd6:  out<=21'b111111111111100111111;
  76.          5'd7:  out<=21'b111111111111001111111;
  77.          5'd8:  out<=21'b111111111110011111111;
  78.          5'd9:  out<=21'b111111111100111111111;
  79.          5'd10: out<=21'b111111111001111111111;
  80.          5'd11: out<=21'b111111110011111111111;
  81.          5'd12: out<=21'b111111100111111111111;
  82.          5'd13: out<=21'b111111001111111111111;
  83.          5'd14: out<=21'b111110011111111111111;//没有写完
  84.         default:;
  85.         endcase
  86. end
  87. endmodule
复制代码
调了大约3个小时  终于调试好了  已经仿真通过   现附上 源程序和工程文档   工程文档是 quartus 11.1 sp1   仿真软件 ModelSim-Altera 10.0c   

后面2个端口是测试端口  test  和test1   wr是输入信号的锁存信号 上升沿信号锁存  clk是处理时钟   in是21位数据输入  out是21位数据输出,rst是复位信号,解码时间最长要22个时钟周期。



本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2012-3-25 13:22:23 | 显示全部楼层
本帖最后由 linjpxt 于 2012-3-25 23:50 编辑

module encoder
(
        input wire clk,
        input wire [20:0] indata,
        input wire bj,
        output wire [20:0] outdata
);

        reg [20:0] data_reg;

        always @ (posedge clk) //如果不加入时钟就写成 always @ (*)
        begin
                        // x and z values are don't-care's
                        casex({bj,indata})
                                22'b1_xxxx_xxxx_xxxx_xxxx_xxxx_x:       data_reg <= indata;                                       
                                22'b0_xxxx_xxxx_xxxx_xxxx_xxxx_0:       data_reg <= 21'b111111111111111111100;                                       
                                22'b0_xxxx_xxxx_xxxx_xxxx_xxx0_1:       data_reg <= 21'b111111111111111111001;
                                22'b0_xxxx_xxxx_xxxx_xxxx_xx01_1:       data_reg <= 21'b111111111111111110011;
                                22'b0_xxxx_xxxx_xxxx_xxxx_x011_1:       data_reg <= 21'b111111111111111100111;
                                22'b0_xxxx_xxxx_xxxx_xxxx_0111_1:       data_reg <= 21'b111111111111111001111;
                                22'b0_xxxx_xxxx_xxxx_xxx0_1111_1:       data_reg <= 21'b111111111111110011111;
                                22'b0_xxxx_xxxx_xxxx_xx01_1111_1:       data_reg <= 21'b111111111111100111111;
                                22'b0_xxxx_xxxx_xxxx_x011_1111_1:       data_reg <= 21'b111111111111001111111;
                                22'b0_xxxx_xxxx_xxxx_0111_1111_1:       data_reg <= 21'b111111111110011111111;
                                22'b0_xxxx_xxxx_xxx0_1111_1111_1:       data_reg <= 21'b111111111100111111111;
                                22'b0_xxxx_xxxx_xx01_1111_1111_1:       data_reg <= 21'b111111111001111111111;
                                22'b0_xxxx_xxxx_x011_1111_1111_1:       data_reg <= 21'b111111110011111111111;
                                22'b0_xxxx_xxxx_0111_1111_1111_1:       data_reg <= 21'b111111100111111111111;
                                22'b0_xxxx_xxx0_1111_1111_1111_1:       data_reg <= 21'b111111001111111111111;
                                22'b0_xxxx_xx01_1111_1111_1111_1:       data_reg <= 21'b111110011111111111111;
                                22'b0_xxxx_x011_1111_1111_1111_1:       data_reg <= 21'b111100111111111111111;
                                22'b0_xxxx_0111_1111_1111_1111_1:       data_reg <= 21'b111001111111111111111;
                                22'b0_xxx0_1111_1111_1111_1111_1:       data_reg <= 21'b110011111111111111111;
                                22'b0_xx01_1111_1111_1111_1111_1:       data_reg <= 21'b100111111111111111111;
                                22'b0_x011_1111_1111_1111_1111_1:       data_reg <= 21'b001111111111111111111;
                                22'b0_0111_1111_1111_1111_1111_1:       data_reg <= 21'b011111111111111111111;
                                22'b0_1111_1111_1111_1111_1111_1:       data_reg <= 21'b111111111111111111111;
                        endcase
        end

        // Catch the outgoing bit
        assign outdata = data_reg;

endmodule

出0入0汤圆

 楼主| 发表于 2012-3-25 16:31:54 | 显示全部楼层
kebaojun305 发表于 2012-3-25 12:36
调了大约3个小时  终于调试好了  已经仿真通过   现附上 源程序和工程文档   工程文档是 quartus 11.1 sp1  ...

非常感谢!! 我马上试一下!!!

出0入8汤圆

发表于 2012-3-25 20:41:58 | 显示全部楼层
你如果要用 估计还的在我源程序上更改下   那个启动信号  估计你要从新处理下了

出0入0汤圆

发表于 2012-3-26 13:36:44 | 显示全部楼层
这年头学校里教的都是verilog不是VHDL了吗?

出0入0汤圆

发表于 2012-3-28 09:15:13 | 显示全部楼层
如果资源够用的话,查表是个不错的办法:
做一个21位地址,21位数据的RAM,数据输入作为地址,数据输出你要的结果,
XXXXXXXXXXXXXXXXXXX01 输出111111111111111111001
将地址满足XXXXXXXXXXXXXXXXXXX01条件的数据全部初始化为:111111111111111111001就可以了。

出0入0汤圆

发表于 2012-3-28 11:18:58 | 显示全部楼层
lanliang714 发表于 2012-3-28 09:15
如果资源够用的话,查表是个不错的办法:
做一个21位地址,21位数据的RAM,数据输入作为地址,数据输出你要 ...

这本来就是一个查表的过程,只是先要对输入进行译码,这是属于优先译码器.

出0入0汤圆

发表于 2012-3-28 22:31:12 | 显示全部楼层
如果仅用时序控制,实际并不能完全解决1楼问题。
个人项目经验处理过类似问题:当CPLD时钟快,过信号变化慢,状态转换过程会有跳变,需要滤除。简单方法是,循环检测从低位起,时钟上升延,当检测到第1个0,再连续读n个值(n根据实际情况选定),如果在n个周期读到预设的m个0(比如n=10,m=8),判定有效值0,编码输出,否则,连续k个1(比如k=2),状态机检测高1个bit值判定。再周而复始。
选值结合实际用途,看似速度慢了,但输出相对稳定可靠。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 11:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表