Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Create an account
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
semicon_lab.jpg

Verilog code for counting number of 1's and number of 0's in parallel data

E-mail Print PDF
Here is the verilog code for counting number of 1's and number of 0's in parallel data. since data is continuously changing on every clock cycle,  counting has to be done using parallel hardware. Below is the code with testbench and simulation result :-

Does anyone know what will be the hardware synthesis tool will make ?

Is it going to be encoder , or  multiple adders or full of mux ??

---------------------------- Verilog Code ------------------

module count1n0 (
input clk,
input rstn,
input [9:0] data,
output reg [3:0] num_of_one,
output reg [3:0] num_of_zero
);

 

 always @(*) begin
      num_of_one  = 4'b0;
      num_of_zero = 4'b0;

    if(!data[0])
      num_of_zero = num_of_zero + 1;
    else
      num_of_one = num_of_one + 1 ;

    if(!data[1])
      num_of_zero = num_of_zero + 1;
    else
      num_of_one = num_of_one +1 ;

    if(!data[2])
      num_of_zero = num_of_zero + 1;
    else
      num_of_one = num_of_one +1 ;

    if(!data[3])
      num_of_zero = num_of_zero + 1;
    else
      num_of_one = num_of_one +1 ;

    if(!data[4])
      num_of_zero = num_of_zero + 1;
    else
      num_of_one = num_of_one +1 ;

    if(!data[5])
      num_of_zero = num_of_zero + 1;
    else
      num_of_one = num_of_one +1 ;

    if(!data[6])
      num_of_zero = num_of_zero + 1;
    else
      num_of_one = num_of_one +1 ;

    if(!data[7])
      num_of_zero = num_of_zero + 1;
    else
      num_of_one = num_of_one +1 ;

    if(!data[8])
      num_of_zero = num_of_zero + 1;
    else
      num_of_one = num_of_one +1 ;

    if(!data[9])
      num_of_zero = num_of_zero + 1;
    else
      num_of_one = num_of_one +1 ;

  end

endmodule
------------------------------------------------------

------------------- Verilog Testbench ----------------

module tb;

reg clk;
reg rstn;
reg [9:0] count;
wire [3:0] one;
wire [3:0] zero;

initial begin
clk =0;
rstn =0;
count =0;
end

initial begin
#100;
rstn = 1 ;
#1000;
$finish;
end

initial $monitor("data = %b, num of zero = %d, num_of_one = %d ", count , zero, one);

always @(negedge clk) begin
count = count + 1297;
end

always #5 clk = ~clk ;

count1n0 dut (
.clk(clk),
.rstn(rstn),
.data(count),
.num_of_one(one),
.num_of_zero(zero)
);

initial begin
 $recordfile("test.trn");
 $recordvars();
end

endmodule
----------------------------------------------------

-------------------Simulation Result - -------------
data = 0000000000, num of zero = 10, num_of_one =  0 
data = 0100010001, num of zero =  7, num_of_one =  3 
data = 1000100010, num of zero =  7, num_of_one =  3 
data = 1100110011, num of zero =  4, num_of_one =  6 
data = 0001000100, num of zero =  8, num_of_one =  2 
data = 0101010101, num of zero =  5, num_of_one =  5 
data = 1001100110, num of zero =  5, num_of_one =  5 
data = 1101110111, num of zero =  2, num_of_one =  8 
data = 0010001000, num of zero =  8, num_of_one =  2 
data = 0110011001, num of zero =  5, num_of_one =  5 
data = 1010101010, num of zero =  5, num_of_one =  5 
data = 1110111011, num of zero =  2, num_of_one =  8 
data = 0011001100, num of zero =  6, num_of_one =  4 
data = 0111011101, num of zero =  3, num_of_one =  7 
data = 1011101110, num of zero =  3, num_of_one =  7 
data = 1111111111, num of zero =  0, num_of_one = 10 
data = 0100010000, num of zero =  8, num_of_one =  2 
data = 1000100001, num of zero =  7, num_of_one =  3 
data = 1100110010, num of zero =  5, num_of_one =  5 
data = 0001000011, num of zero =  7, num_of_one =  3 
data = 0101010100, num of zero =  6, num_of_one =  4 
data = 1001100101, num of zero =  5, num_of_one =  5 
data = 1101110110, num of zero =  3, num_of_one =  7 
data = 0010000111, num of zero =  6, num_of_one =  4 
data = 0110011000, num of zero =  6, num_of_one =  4 
data = 1010101001, num of zero =  5, num_of_one =  5 
data = 1110111010, num of zero =  3, num_of_one =  7 
data = 0011001011, num of zero =  5, num_of_one =  5 
data = 0111011100, num of zero =  4, num_of_one =  6 
data = 1011101101, num of zero =  3, num_of_one =  7 
data = 1111111110, num of zero =  1, num_of_one =  9 
data = 0100001111, num of zero =  5, num_of_one =  5 
data = 1000100000, num of zero =  8, num_of_one =  2 
data = 1100110001, num of zero =  5, num_of_one =  5 
data = 0001000010, num of zero =  8, num_of_one =  2 
data = 0101010011, num of zero =  5, num_of_one =  5 
data = 1001100100, num of zero =  6, num_of_one =  4 
data = 1101110101, num of zero =  3, num_of_one =  7 
data = 0010000110, num of zero =  7, num_of_one =  3 
data = 0110010111, num of zero =  4, num_of_one =  6 
data = 1010101000, num of zero =  6, num_of_one =  4 
data = 1110111001, num of zero =  3, num_of_one =  7 
data = 0011001010, num of zero =  6, num_of_one =  4 
data = 0111011011, num of zero =  3, num_of_one =  7 
data = 1011101100, num of zero =  4, num_of_one =  6 
data = 1111111101, num of zero =  1, num_of_one =  9 
data = 0100001110, num of zero =  6, num_of_one =  4 
data = 1000011111, num of zero =  4, num_of_one =  6 
data = 1100110000, num of zero =  6, num_of_one =  4 
data = 0001000001, num of zero =  8, num_of_one =  2 
data = 0101010010, num of zero =  6, num_of_one =  4 
data = 1001100011, num of zero =  5, num_of_one =  5 
data = 1101110100, num of zero =  4, num_of_one =  6 

ạn Có Đam Mê Với Vi Mạch hay Nhúng      -     Bạn Muốn Trau Dồi Thêm Kĩ Năng

Mong Muốn Có Thêm Cơ Hội Trong Công Việc

Và Trở Thành Một Người Có Giá Trị Hơn

Bạn Chưa Biết Phương Thức Nào Nhanh Chóng Để Đạt Được Chúng

Hãy Để Chúng Tôi Hỗ Trợ Cho Bạn. SEMICON  

Last Updated ( Thursday, 06 May 2021 12:06 )  

Related Articles

Chat Zalo