校招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 种是百度而来的邪门法,一拍都不用,直接就出结果了;

 

posted @ 2020-08-09 14:00  咸鱼IC  阅读(2531)  评论(3编辑  收藏  举报