校招Verilog——一個周期算出所有高電平的個數


一、題目

  在一個時鍾周期內算出輸入的13路脈沖信號中,高電平的個數。

 

二、代碼

 1 //**************************************************************************
 2 // *** 描述 : 在一個時鍾周期內算出13路脈沖信號為高電平的個數
 3 // *** 出處 : 特權《深入淺出》20頁
 4 //**************************************************************************
 5 
 6 module test
 7 //========================< 端口 >==========================================
 8 (
 9 input   wire                clk                 ,
10 input   wire                rst_n               ,
11 input   wire    [12:0]      data                ,
12 output  wire    [15:0]      num     
13 );
14 //========================< 信號 >==========================================
15 reg     [ 3:0]              i                   ;
16 
17 /*
18 //==========================================================================
19 //==                        1拍 疊加之前的num
20 //==========================================================================
21 always @(posedge clk or negedge rst_n) begin
22     if(!rst_n) begin
23         num = 0;
24     end
25     else begin
26         for(i=0;i<13;i=i+1)
27             if(data[i])
28                 num = num + 1;      //注意是阻塞賦值
29     end
30 end
31 //==========================================================================
32 //==                        1拍 不疊加之前的num
33 //==========================================================================
34 always @(posedge clk or negedge rst_n) begin
35     if(!rst_n) begin
36         num = 0;
37     end
38     else begin
39         num = 0;                    //注意清0
40         for(i=0;i<13;i=i+1)
41             if(data[i])
42                 num = num + 1;      //注意是阻塞賦值
43     end
44 end
45 */
46 //==========================================================================
47 //==                        0拍 不疊加之前的num
48 //==========================================================================
49 assign num   = data[12] + data[11] + data[10] + data[9] + 
50                data[ 8] + data[ 7] + data[ 6] + data[5] + 
51                data[ 4] + data[ 3] + data[ 2] + data[1] + data[0]; 
52 
53 endmodule

 

三、說明

1、第 1 種是特權《深入淺出》書中給出的辦法,計算的結果會不斷累加;

2、第 2 種是基於第 1 種方法的更改,計算的結果不會累加,更加符合題意;

3、第 3 種是百度而來的邪門法,一拍都不用,直接就出結果了;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM