注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
wall_e的个人空间 https://home.eeworld.com.cn/space-uid-274378.html [收藏] [复制] [分享] [RSS]
日志

模块的调用

已有 731 次阅读2010-11-13 21:33

这是我写的程序 原本我的显示程序模块是和主程序是一起的,现在我想把显示模块提出来 然后用实例引用的方式引用显示模块,方便以后引用。

 

程序的主要功能是 一个按键加一  一个按键减一 一个按键复位

 

这个是顶层文件  被注释掉的那部分是显示程序的


/*****************************
*Project : key_2
*Author : Mr.li
*CreateData : 2010-11-2
*Information :
*Function : 
*ModifyInformation : 2010-11-10 

*****************************/
module Key_3(   Clk_50Mhz, //50Mh系统时钟输入
    KeyIn,     //按下为低电平 不按下为高电平
    Rst_L,     //
    LedSeg,     //
    LedEn  //
   );

input Clk_50Mhz, Rst_L;
input[1:0] KeyIn; //
output[7:0] LedSeg, LedEn;
reg[7:0] LedSeg, LedEn;
//reg[15:0] Scant_Cnt;
reg[19:0] Cnt;      //20ms 扫描一次
//reg[4:0] Num;
reg[4:0] LedNum[7:0];  // 宽度为四 深度为八的存储空间

reg[1:0] Key_R; //存储键值
reg[1:0] Key_R_H;

/*
always @ (posedge Clk_50Mhz or negedge Rst_L)
 begin
  if(!Rst_L)
   begin
    
    Scant_Cnt <= 0;
    LedEn <= 8'b1111_1110;
   end
  else
   begin
    if( Scant_Cnt == 16'hffff )    //
     begin
      Scant_Cnt <= 0;
      LedEn[7:1] <= LedEn[6:0];
      LedEn[0] <= LedEn[7];
     end
    else Scant_Cnt <= Scant_Cnt + 1;
   end 
 end
 

*/

/****************************************************************/
always @ (posedge Clk_50Mhz or negedge Rst_L)
 if(!Rst_L)
  Cnt <= 20'd0;
 else
  Cnt <= Cnt + 1'b1;

always @ (posedge Clk_50Mhz or negedge Rst_L)
 if(!Rst_L)
  Key_R <= 2'b11;
 else if(Cnt == 20'hfffff)
  Key_R <= KeyIn;

always @ (posedge Clk_50Mhz or negedge Rst_L)
 if(!Rst_L)
  Key_R_H <= 2'b11;
 else
  Key_R_H <= Key_R;

wire[1:0] sw = Key_R_H & (~Key_R);

////////////////////////////////////////////////////
always @ ( posedge Clk_50Mhz or negedge Rst_L )
 begin
  if(!Rst_L)
   begin
    LedNum[0] <= 0;
    LedNum[1] <= 0;
    LedNum[2] <= 0;
    LedNum[3] <= 0;
    LedNum[4] <= 0;
    LedNum[5] <= 0;
    LedNum[6] <= 0;
    LedNum[7] <= 0; 
   end
 /* 
  else if( sw )
   
        
  */
  
  else
   case (sw)
    2'b01 : // add 1   +1
      begin
       LedNum[0] <= LedNum[0] + 1;
       if(LedNum[0] == 9)
        begin
         LedNum[1] <= LedNum[1] + 1;
         LedNum[0] <= 0;   
         if(LedNum[1] == 9)
          begin
           LedNum[2] <= LedNum[2] + 1;
           LedNum[1] <= 0;
           if(LedNum[2] == 9)
            begin
             LedNum[3] <= LedNum[3] + 1;
             LedNum[2] <= 0;
            end
          end
        end
      end

    2'b10 : // subtract 1   -1
      begin
       LedNum[0] <= LedNum[0] - 1;
       if(LedNum[0] == 0)
        begin
         LedNum[1] <= LedNum[1] - 1;
         LedNum[0] <= 9;   
         if(LedNum[1] == 0)
          begin
           LedNum[2] <= LedNum[2] - 1;
           LedNum[1] <= 9;
           if(LedNum[2] == 0)
            begin
             LedNum[3] <= LedNum[3] - 1;
             LedNum[2] <= 9;
            end
          end
        end
      end
    default :
      begin 
       LedNum[0] <= LedNum[0];
       LedNum[1] <= LedNum[1];
       LedNum[2] <= LedNum[2];
       LedNum[3] <= LedNum[3];
       LedNum[4] <= LedNum[4];
       LedNum[5] <= LedNum[5];
       LedNum[6] <= LedNum[6];
       LedNum[7] <= LedNum[7];
      end
   endcase
end


LedDis v1( 
   .Clk_50Mhz (Clk_50Mhz),
   /*.LedNum[0] (LedNum[0]),
   .LedNum[1] (LedNum[1]),
   .LedNum[2] (LedNum[2]),
   .LedNum[3] (LedNum[3]),
   
   .LedNum[4] (LedNum[4]),
   .LedNum[5] (LedNum[5]),
   .LedNum[6] (LedNum[6]),
   .LedNum[7] (LedNum[7]),*/
   
   .LedSeg (LedSeg),
   .LedEn (LedEn),
   .Rst_L (Rst_L)
  ); 
   
/*
//////////////////////////////////////////////////////
always @ (posedge Clk_50Mhz)
 begin
  case ( LedEn )
   8'b1111_1110 : Num <= LedNum[0];
   8'b1111_1101 : Num <= LedNum[1];
   8'b1111_1011 : Num <= LedNum[2];
   8'b1111_0111 : Num <= LedNum[3];
   
   8'b1110_1111 : Num <= LedNum[4];
   8'b1101_1111 : Num <= LedNum[5];
   8'b1011_1111 : Num <= LedNum[6];
   8'b0111_1111 : Num <= LedNum[7];
  endcase
 end


//////////////////////////////////////////////////////

//数码管代码译码进程块 触发信号为Num
always @ ( Num )
 begin
  case(Num)
   5'b00000:   
    LedSeg=8'b1100_0000; //0 c0
   5'b00001: 
    LedSeg=8'b1111_1001; //1 f9
   5'b00010: 
    LedSeg=8'b1010_0100; //2 a4
   5'b00011:
    LedSeg=8'b1011_0000; //3 b0
   5'b00100: 
    LedSeg=8'b1001_1001; //4 99
   5'b00101: 
    LedSeg=8'b1001_0010; //5 92
   5'b00110: 
    LedSeg=8'b1000_0010; //6 82
   5'b00111:
    LedSeg=8'b1111_1000; //7 f8
   5'b01000: 
    LedSeg=8'b1000_0000; //8 80
   5'b01001: 
    LedSeg=8'b1001_0000; //9 90
   5'b01010: 
    LedSeg=8'b1000_1000; //a 88
   5'b01011: 
    LedSeg=8'b1000_0011; //b 83
   5'b01100: 
    LedSeg=8'b1100_0110; //c c6 
   5'b01101: 
    LedSeg=8'b1010_0001; //d a1
   5'b01110: 
    LedSeg=8'b1000_0110; //e 86
   5'b01111: 
    LedSeg=8'b1000_1110; //f 8e 
   5'b10000:
    LedSeg=8'b1011_1111; //  -
   default :
    LedSeg=8'b0100_0000; //
  endcase
 end

*/

endmodule

 
 

 

这个是显示模块 是我改写的 不成功

 

 

/***************************************
*Project : LedDis
*Author : Mr.Li
*CreateData : 2010-11-13 pm
*Information :
*Function :
***************************************/
module LedDis(
    Clk_50Mhz,
    
    LedNum[0],
    LedNum[1],
    LedNum[2],
    LedNum[3],
    
    LedNum[4],
    LedNum[5],
    LedNum[6],
    LedNum[7],
    
    LedSeg,
    LedEn,
    Rst_L
   );

input[4:0]  LedNum[0],
   LedNum[1],
   LedNum[2],
   LedNum[3],
    
   LedNum[4],
   LedNum[5],
   LedNum[6],
   LedNum[7];
  
input Clk_50Mhz, Rst_L;

output[7:0] LedSeg, LedEn;
reg[7:0] LedSeg, LedEn;

reg[15:0] Scant_Cnt;
reg[4:0] Num;
/////////////////////////////////////////////////////////
always @ ( posedge Clk_50Mhz or negedge Rst_L )
 begin
  if(!Rst_L)
   begin
    LedEn <= 8'b1111_1110;
    Scant_Cnt <= 0;
   end
  else
   begin
    if(Scant_Cnt == 16'hffff)
     begin
      Scant_Cnt <= 0;
      LedEn[7:1] <= LedEn[6:0];
      LedEn[0] <= LedEn[7];
     end
    else
     Scant_Cnt <= Scant_Cnt + 1;
   end
 end


//////////////////////////////////////////////////
always @ (posedge Clk_50Mhz)
 begin
  case ( LedEn )
   8'b1111_1110 : Num <= LedNum[0];
   8'b1111_1101 : Num <= LedNum[1];
   8'b1111_1011 : Num <= LedNum[2];
   8'b1111_0111 : Num <= LedNum[3];
   
   8'b1110_1111 : Num <= LedNum[4];
   8'b1101_1111 : Num <= LedNum[5];
   8'b1011_1111 : Num <= LedNum[6];
   8'b0111_1111 : Num <= LedNum[7];
  endcase
 end


//////////////////////////////////////////////////////

//数码管代码译码进程块 触发信号为Num
always @ ( Num )
 begin
  case(Num)
   5'b00000:   
    LedSeg=8'b1100_0000; //0 c0
   5'b00001: 
    LedSeg=8'b1111_1001; //1 f9
   5'b00010: 
    LedSeg=8'b1010_0100; //2 a4
   5'b00011:
    LedSeg=8'b1011_0000; //3 b0
   5'b00100: 
    LedSeg=8'b1001_1001; //4 99
   5'b00101: 
    LedSeg=8'b1001_0010; //5 92
   5'b00110: 
    LedSeg=8'b1000_0010; //6 82
   5'b00111:
    LedSeg=8'b1111_1000; //7 f8
   5'b01000: 
    LedSeg=8'b1000_0000; //8 80
   5'b01001: 
    LedSeg=8'b1001_0000; //9 90
   5'b01010: 
    LedSeg=8'b1000_1000; //a 88
   5'b01011: 
    LedSeg=8'b1000_0011; //b 83
   5'b01100: 
    LedSeg=8'b1100_0110; //c c6 
   5'b01101: 
    LedSeg=8'b1010_0001; //d a1
   5'b01110: 
    LedSeg=8'b1000_0110; //e 86
   5'b01111: 
    LedSeg=8'b1000_1110; //f 8e 
   5'b10000:
    LedSeg=8'b1011_1111; //  -
   default :
    LedSeg=8'b0100_0000; //
  endcase
 end

endmodule

本文含有来自论坛的附件或图片:[verilog.jpg],点击查看原帖附件。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章