3504|1

234

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

模块的调用 [复制链接]

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

 

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

 

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


/*****************************
*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 (50.36 KB, 下载次数: 3)

verilog.jpg
此帖出自FPGA/CPLD论坛

最新回复

看不清你的错误问题是什么?  详情 回复 发表于 2010-11-23 11:44
点赞 关注
个人签名努力就有不清不楚的收获。
 

回复
举报

10

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
看不清你的错误问题是什么?
此帖出自FPGA/CPLD论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表