2017-10-13 27 views
0

내 마음에서 뭘 하려는지 8 비트의 입력을 받아 1을 계산합니다. 그런 다음 그 1을 나타냅니다.Verilog에서 8 비트 입력에서 1의 수를 세고 출력하고 있습니까?

  • 적절한 방법은 8 일 비트 입력을 가지고 있다는 것입니다

    01010111해야 출력 0101

    module 8to4 (in,out,hold,clk,reset); 
    input [7:0] in; //1 bit inputs 
    reg [7:0] hold; //possible use for case statement 
    output [3:0] out; //Shows the count of bits 
    
    always @(clk) 
        begin 
        out = in[0] + in[1] + in[2] + in[3] + in[4] + in[5] + in[6] + in[7]; //Adds the inputs from testbench and outputs it 
        end 
    endmodule 
    

    질문 (오 1의 입력에서을 수 있습니다)? 또는 각 변수를 1 비트로 선언해야합니까? 예 : A, B, C, D, E, F, G, H;

  • 위의 코드가 정확하면 거의 1의 개수를 표시하는 적절한 방법입니까? 나는 성명서가 필요할 것인가?

저는 정말 Verilog를 처음 접했기 때문에 아직 테스트 벤치에 대해 생각하고 싶지 않습니다.

답변

0

작성한 방법은 비트 수를 쉽게 매개 변수화 할 수 있기 때문에 작성하는 더 좋은 방법 일 수 있습니다. 그러나 기술적으로는 8 비트 입력이 하나 있습니다.

module 8to4 #(parameter WIDTH=8) (input [WIDTH-1:0] in, 
         output reg [3:0] out,hold, 
         input clk,reset); 
    reg [WIDTH-1:0] temp; 
    integer ii; 
    always @(clk) 
    begin 
     temp = 0; 
     for(ii=0; ii<WIDTH; i = i + 1) 
     temp = temp + in[ii]; 
     out <= temp; 
    end 
endmodule 
+0

죄송합니다. 아직 답답합니다. '# (WIDTH-8)'을 설명해 주시겠습니까? 또한 인터넷 검색 뭉치'정수 ii; 무리 후 솔직히 나는 Verilog 그런 int를 만들 수 몰랐고 그것에 대한 테스트 벤치를 작성하는 방법을 단서가되지 않을 것이다. –

+0

죄송합니다. 오타였습니다. 다른 크기의 입력에 사용할 수 있도록 모듈을 매개 변수화했습니다. WIDTH = 8이면'for' 루프는 원래 표현식과 완전히 똑같습니다. 합성 도구가 내 루프를 표현식에 풀어 놓습니다. 그러나 이제 매개 변수화되었으므로'WIDTH'를 16이나 다른 것으로 대체 할 수 있습니다. –

0

논리적으로 코드가 적절합니다.

그러나 다음과 같이 개선 할 수 있습니다. 당신이 절차 적 과제에 그것을 사용하고 있기 때문에

  • regout을 확인합니다.
  • reset의 용도. 이상적으로 모든 코드는 코드에서 누락 된 재설정 상태 여야합니다.
  • 현재 지정되지 않은 hold, clk & reset 포트에 대한 방향 (입력/출력)을 선언하십시오.
  • dave에서 언급했듯이 코드에는 parameters을 사용할 수 있습니다.