Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module hamming_gen #(
- parameter NUM_PARITY = 3
- ) (
- input logic [ NUM_DATA - 1 : 0] data,
- output logic [NUM_PARITY - 1 : 0] parity
- );
- localparam NUM_DATA = 2 ** NUM_PARITY - NUM_PARITY - 1;
- localparam NUM_TOTAL = 2 ** NUM_PARITY - 1;
- function parity_covers(input integer p, input integer d);
- integer i;
- integer j = 0;
- for (i = 1; i <= NUM_TOTAL && j < d; i++)
- if (i != (i & ~(i - 1))) /* Data bit */
- j++;
- return ((i - 1) >> (p - 1)) & 1;
- endfunction
- function integer foo(input integer d);
- integer i;
- integer j = 0;
- for (i = 1; i <= NUM_TOTAL && j < d; i++)
- if (i != (i & ~(i - 1))) /* Data bit */
- j++;
- return i - 1;
- endfunction
- generate
- genvar i, j;
- for (i = 0; i < NUM_PARITY; i++) begin
- for (j = 0; j < NUM_DATA; j++) begin
- if (parity_covers(i + 1, j + 1)) begin
- assign parity[i] = ^data[j];
- end
- /*if ((j & ~(j - 1)) != j) begin
- assign parity[i] = ^data[j - (j & ~(j - 1))];
- end*/
- end
- end
- endgenerate
- initial begin
- integer i, j;
- for (i = 1; i <= NUM_DATA; i++)
- $display("%d -> %d", i, foo(i));
- for (i = 1; i <= NUM_PARITY; i++)
- for (j = 1; j <= NUM_DATA; j++)
- $display("parity_covers(%d, %d): %d", i, j, parity_covers(i, j));
- /*$display("parity: %d\n data: %d\n total: %d",
- NUM_PARITY, NUM_DATA, NUM_PARITY + NUM_DATA);*/
- end
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement