sampling_moudle‘s V files(with 24 Keys, 5 Decoders)

来源:互联网 发布:杭州知味观礼盒 编辑:程序博客网 时间:2024/05/01 07:10
module Decoder0(clk, RSTn, quadA, quadB, count);/************************************************************************************************/input clk, RSTn, quadA, quadB;output [15:0] count;//Decoder0 for steering wheel, so use 16 bits to count/************************************************************************************************/reg [2:0] quadA_delayed, quadB_delayed;always @(posedge clk) quadA_delayed <= {quadA_delayed[1:0], quadA};always @(posedge clk) quadB_delayed <= {quadB_delayed[1:0], quadB};wire count_enable = quadA_delayed[1] ^ quadA_delayed[2] ^ quadB_delayed[1] ^ quadB_delayed[2];wire count_direction = quadA_delayed[1] ^ quadB_delayed[2];/************************************************************************************************/reg [15:0] count;always @(posedge clk or negedge RSTn)if(!RSTn)count<=16'd0;elsebeginif(count_enable)beginif(count_direction) count<=count+16'b1; else count<=count-16'b1;endend/************************************************************************************************/endmodule

module Decoder_Out(clk, RSTn, quadA, quadB, count_Out);/*****************************************/input clk, RSTn;input [4:0] quadA, quadB;output [47:0] count_Out;/*****************************************/wire [15:0] count0;Decoder0 U1(.clk(clk),.RSTn(RSTn),.quadA(quadA[0]),.quadB(quadB[0]),.count(count0));/*****************************************/wire [7:0] count1;Decoder1 U2(.clk(clk),.RSTn(RSTn),.quadA(quadA[1]),.quadB(quadB[1]),.count(count1));/*****************************************/wire [7:0] count2;Decoder2 U3(.clk(clk),.RSTn(RSTn),.quadA(quadA[2]),.quadB(quadB[2]),.count(count2));/*****************************************/wire [7:0] count3;Decoder3 U4(.clk(clk),.RSTn(RSTn),.quadA(quadA[3]),.quadB(quadB[3]),.count(count3));/*****************************************/wire [7:0] count4;Decoder4 U5(.clk(clk),.RSTn(RSTn),.quadA(quadA[4]),.quadB(quadB[4]),.count(count4));/**********************************************************/assign count_Out={count4, count3, count2, count1, count0};/**********************************************************/endmodule

module Key0(          clk, RSTn, Key_In, Key_Out  );/************************************************************************************************************/  input clk, RSTn;  // "clk" is the clock  input Key_In;  // "Key_In" is the glitched, asynchronous, active low push-button signal  output Key_Out;  // 1 while the push-button is active (down)  /************************************************************************************************************/ // First use two flipflops to synchronize the Key signal the "clk" clock domain  reg Key_sync_0;  always @(posedge clk) Key_sync_0 <= ~Key_In;  // invert Key_In to make Key_sync_0 active high  reg Key_sync_1;  always @(posedge clk) Key_sync_1 <= Key_sync_0;  // Next declare a 16-bits counter  reg [17:0] Key_cnt;  // When the push-button is pushed or released, we increment the counter  // The counter has to be maxed out before we decide that the push-button state has changed  reg Key_Out;  // state of the push-button (0 when up, 1 when down)  wire Key_idle = (Key_Out==Key_sync_1);  wire Key_cnt_max = &Key_cnt;    // true when all bits of Key_cnt are 1's  /************************************************************************************************************/always @(posedge clk or negedge RSTn)          if(!RSTn)                  Key_cnt <= 16'd0;                                            else if(Key_idle)              Key_cnt <=16'd0;  // nothing's going on                        else                  begin                      Key_cnt <= Key_cnt + 18'b1;  // something's going on, increment the counter                      if(Key_cnt_max) Key_Out <= ~Key_Out;  // if the counter is maxed out, Key_Out changed!                  end                /************************************************************************************************************/                  endmodule  

module Key_Out  (  clk, RSTn, Key_In, Key_out  );  /***************************************/input clk, RSTn;input [23:0] Key_In;output [23:0] Key_out;  /***************************************/ wire Key0_Out;  Key0 U1   (  .clk(clk),      .RSTn(RSTn),     .Key_In(Key_In[0]),    .Key_Out(Key0_Out)  );   /***************************************/wire Key1_Out;  Key1 U2  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[1]),      .Key_Out(Key1_Out)  );   /***************************************/  wire Key2_Out;  Key2 U3  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[2]),      .Key_Out(Key2_Out)  );   /***************************************/  wire Key3_Out;  Key3 U4  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[3]),      .Key_Out(Key3_Out)  );   /***************************************/  wire Key4_Out;  Key4 U5  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[4]),      .Key_Out(Key4_Out)  );   /***************************************/  wire Key5_Out;  Key5 U6  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[5]),      .Key_Out(Key5_Out)  );   /***************************************/  wire Key6_Out;  Key6 U7  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[6]),      .Key_Out(Key6_Out)  );   /***************************************/  wire Key7_Out;  Key7 U8  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[7]),      .Key_Out(Key7_Out)  );   /***************************************/  wire Key8_Out;  Key8 U9  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[8]),      .Key_Out(Key8_Out)  );   /***************************************/  wire Key9_Out;  Key9 U10  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[9]),      .Key_Out(Key9_Out)  );   /***************************************/  wire Key10_Out;  Key10 U11  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[10]),      .Key_Out(Key10_Out)  );   /***************************************/  wire Key11_Out;  Key11 U12  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[11]),      .Key_Out(Key11_Out)  );   /***************************************/  wire Key12_Out;  Key12 U13  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[12]),      .Key_Out(Key12_Out)  );   /***************************************/  wire Key13_Out;  Key13 U14  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[13]),      .Key_Out(Key13_Out)  );   /***************************************/  wire Key14_Out;  Key14 U15  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[14]),      .Key_Out(Key14_Out)  );   /***************************************/  wire Key15_Out;  Key15 U16  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[15]),      .Key_Out(Key15_Out)  );   /***************************************/  wire Key16_Out;  Key16 U17  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[16]),      .Key_Out(Key16_Out)  );   /***************************************/ wire Key17_Out;  Key17 U18  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[17]),      .Key_Out(Key17_Out)  );   /***************************************/   wire Key18_Out;  Key18 U19  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[18]),      .Key_Out(Key18_Out)  );   /***************************************/  wire Key19_Out;  Key19 U20  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[19]),      .Key_Out(Key19_Out)  );   /***************************************/  wire Key20_Out;  Key20 U21  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[20]),      .Key_Out(Key20_Out)  );   /***************************************/  wire Key21_Out;  Key21 U22  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[21]),      .Key_Out(Key21_Out)  );   /***************************************/  wire Key22_Out;  Key22 U23  (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[22]),      .Key_Out(Key22_Out)  );   /***************************************/  wire Key23_Out;  Key23 U24 (      .clk(clk),      .RSTn(RSTn),    .Key_In(Key_In[23]),      .Key_Out(Key23_Out)  );  /***************************************/  assign Key_out={Key23_Out, Key22_Out,Key21_Out, Key20_Out,Key19_Out, Key18_Out,Key17_Out, Key16_Out,Key15_Out, Key14_Out,Key13_Out, Key12_Out,Key11_Out, Key10_Out,Key9_Out, Key8_Out,Key7_Out, Key6_Out,Key5_Out, Key4_Out,Key3_Out, Key2_Out, Key1_Out, Key0_Out};  /***************************************/endmodule  

module Sampling_moudle(clk, RSTn, Read_count_Out, Read_Key_Out,Data_Out);/*********************************************/input clk, RSTn;input [23:0] Read_Key_Out;input [47:0] Read_count_Out;output[7:0] Data_Out;/*********************************************/Key_Out U1(.clk(clk),.RSTn(RSTn),.Key_out(Read_Key_out));/*********************************************/Decoder_Out U2(.clk(clk),.RSTn(RSTn),.count_Out(Read_count_out));/*********************************************/endmodule