File: verilog.sv

package info (click to toggle)
cloc 2.06-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 8,064 kB
  • sloc: perl: 30,146; cpp: 1,219; python: 623; ansic: 334; asm: 267; makefile: 244; sh: 186; sql: 144; java: 136; ruby: 111; cs: 104; pascal: 52; lisp: 50; haskell: 35; f90: 35; cobol: 35; objc: 25; php: 22; javascript: 15; fortran: 9; ml: 8; xml: 7; tcl: 2
file content (86 lines) | stat: -rw-r--r-- 2,536 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* http://www.asic-world.com/examples/verilog/parity.html#And_the_Practical_One
 */
 //-----------------------------------------------------
 // Design Name : parity_using_function2
 // File Name   : parity_using_function2.v
 // Function    : Parity using function
 // Coder       : Deepak Kumar Tala
 //-----------------------------------------------------
 module parity_using_function2 (
 data_in    , //  8 bit data in
 parity_out   //  1 bit parity out
 );
 output  parity_out ;
 input [7:0] data_in ; 
      
 wire parity_out ;
 function parity;
   input [31:0] data; 
   integer i; 
   begin 
     parity = 0; 
     for (i = 0; i < 32; i = i + 1) begin  
       parity = parity ^ data[i]; 
     end 
   end 
 endfunction 
 
 always @ (data_in)
 begin
   parity_out = parity(data_in);
 end
 
 endmodule
//-----------------------------------------------------
 // Design Name : parallel_crc_ccitt
 // File Name   : parallel_crc.v
 // Function    : CCITT Parallel CRC
 // Coder       : Deepak Kumar Tala
 //-----------------------------------------------------
 module parallel_crc_ccitt (
 clk     ,
 reset   ,
 enable  ,
 init    , 
 data_in , 
 crc_out
 );
 //-----------Input Ports---------------
 input clk     ;
 input reset   ;
 input enable  ;
 input init    ;
 input [7:0] data_in ;
 //-----------Output Ports---------------
 output [15:0] crc_out;
 //------------Internal Variables--------
 reg [15:0]   crc_reg;
 wire [15:0]  next_crc;
 //-------------Code Start-----------------
 assign crc_out = crc_reg;
 // CRC Control logic
 always @ (posedge clk)
 if (reset) begin
   crc_reg <= 16'hFFFF;
 end else if (enable) begin
   if (init) begin
      crc_reg <= 16'hFFFF;
   end else begin
      crc_reg <= next_crc;
   end
 end
 // Parallel CRC calculation
 assign next_crc[0] = data_in[7] ^ data_in[0] ^ crc_reg[4] ^ crc_reg[11];
 assign next_crc[1] = data_in[1] ^ crc_reg[5];
 assign next_crc[2] = data_in[2] ^ crc_reg[6];
 assign next_crc[3] = data_in[3] ^ crc_reg[7];
 assign next_crc[4] = data_in[4] ^ crc_reg[8];
 assign next_crc[5] = data_in[7] ^ data_in[5] ^ data_in[0] ^ crc_reg[4] ^ crc_reg[9] ^ crc_reg[11];
 assign next_crc[6] = data_in[6] ^ data_in[1] ^ crc_reg[5] ^ crc_reg[10];
 assign next_crc[7] = data_in[7] ^ data_in[2] ^ crc_reg[6] ^ crc_reg[11];
 assign next_crc[8] = data_in[3] ^ crc_reg[0] ^ crc_reg[7];
 assign next_crc[9] = data_in[4] ^ crc_reg[1] ^ crc_reg[8];
 assign next_crc[10] = data_in[5] ^ crc_reg[2] ^ crc_reg[9];
 assign next_crc[11] = data_in[6] ^ crc_reg[3] ^ crc_reg[10];
 
 endmodule