一、題目
在一個時鍾周期內算出輸入的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 種是百度而來的邪門法,一拍都不用,直接就出結果了;