zzw_rst

  • 2023-03-22
  • 回复了主题帖: 看不懂这个汉明码 解码器代码?

    huo_hu 发表于 2023-3-22 13:36 汉明码很久以前明白过 verlong稍微懂一点
    纠一位出错可以理解,else if (syndrome[SYND]<0) begin NOERROR = 1'b0; UCERR = 1'b1; end         // Uncorrectable你帮忙看一下这条语句是怎么分辨出是非1位出错的,因为SYND计算我觉得是不可能=-1的,说一下具体流程。

  • 2023-03-21
  • 发表了主题帖: 看不懂这个汉明码 解码器代码?

    疑惑如红色字体注释,非常需要大家的帮助,谢谢了。   module Vrhamcorr64(DU, DC, NOERROR, UCERR);   input [71:0] DU;   output reg [71:0] DC;   output reg NOERROR, UCERR;   integer syndrome [0:255];      reg [71:0] C [1:8];    // Constants for parity-check matrix   integer b, e, i, col;   reg [7:0] syn;   reg [7:0] SYND; initial begin   C[1] = 72'h80000000000000007f; C[2] = 72'h400000003fffffff80;                          C应该是校验矩阵   C[3] = 72'h20001fffc0007fff80; C[4] = 72'h100fe03fc07f807f80;   C[5] = 72'h0871e3c3c78787878f; C[6] = 72'h04b66cccd9999999b3;   C[7] = 72'h02dab5556aaaaaaad5; C[8] = 72'hffffffffffffffffff;   for (i=0; i<=255; i=i+1) syndrome[i] = -1; // Initialize syndrome array to invalid       syndrome是一个变量么?比如说和输入A,B差不多,但是syndrome有syndrome[i],syndrome[syn],syndrome[SYND],一般来说变量位数是固定的,不懂为什么syndrome有3种?=-1也不是很理解。   for (col=0; col<=71; col=col+1) begin // Populate valid syndromes                       不是很懂initial语句,定义常数矩阵如上面那样列出来应该可以了吧,而且涉及的变量也很多,不知道这两个for语句是拿来干嘛的?     for (e=1; e<=8; e=e+1) syn[8-e] = C[e][col];                                                         没见过变量后面跟两个[],不知道是什么东东?                                 syndrome[syn] = col;                                                                                             syndrome[syn]和syndrome[syn]有什么关系么,下面的语句好像没用到syndrome[syn]?   end end always @ (DU) begin   DC = DU;   for (b=0; b<=7; b=b+1) SYND[b] = ^(C[8-b] & DU);  // Calculate received syndrome                             应该是输出码字*校验矩阵,然后异或,得出8个等于0的等式     NOERROR = 1'b1; UCERR = 1'b0;         // Default values, no errors     if (SYND[7:0]==8'b0) ;                                                     // No errors     else if (syndrome[SYND]<0) begin NOERROR = 1'b0; UCERR = 1'b1; end         // Uncorrectable     对syndrome已经懵圈,二进制计算怎么会<0呢?虽然说上面那个是定义=-1。如果纠不了错,应该是出现2位以上的错,SYND[]出现了和1位出错一样的数(或者说是SYND[]还是等于0),这条语句是怎么分辨出是1位出错还是多位出错的?     else if (SYND[0]!=1'b1) begin NOERROR = 1'b0; UCERR = 1'b1; end            // Uncorrectable          SYND[0]应该是全奇偶校验位,=1的时候只能指示每一位都可能是出错位,但不能纠错     else begin NOERROR = 1'b0;  DC[syndrome[SYND]] = ~DU[syndrome[SYND]]; end  // Correctable剩下应该是其他1位出错的,找到出错位然后按位取反纠错。   end endmodule

  • 2023-03-16
  • 发表了主题帖: 进来看看这段汉明 译码器代码吧(in Verilog)

    本帖最后由 zzw_rst 于 2023-3-17 13:04 编辑 疑问在截图上,因为压缩所以放和文本一起了。  

  • 2022-12-15
  • 回复了主题帖: 求助前辈们Verilog lut个数的问题

    卿小小 发表于 2022-12-14 17:53 //------说明 如果不是导师作业,这种代码的含金量不太高。想学习Verilog或者FPGA的话建议从开发板的教 ...
    很感谢回复。第一、二张是同一个功能的,lut数是3vs4,是我弄反了或者是版本的问题?lut数感觉自己能算出来好一点,机器也需要对比参考。如果是比较多的代码要综合,需要选择的时候,都要敲上去感觉可能会花多点时间,不知道我想得对不对。because even in this simple example (just an 8-input function) Vivado does not search the entire "solution space" for the best implementation, and the results depend very much on the starting point. “starting point”是什么。最快实现方式应该不全取决于lut数吧,有什么因素影响。 

  • 2022-12-12
  • 发表了主题帖: 求助前辈们Verilog lut个数的问题

    问一下这几个模块有几个lut,因为是新手,不知道综合出哪些函数,需要讲函数来源细一些。 然后是延迟上有什么,多少级lut。 注:最后两张图片有示例调用。

最近访客

< 1/1 >

统计信息

已有9人来访过

  • 芯积分:52
  • 好友:--
  • 主题:14
  • 回复:34
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言