linex0816

又是一个 七十二松 (72pines) 博客

D锁存器

module D_latch(
 D,       //输入选择地址由开关决定,0:按下,1:未按下
 E,       //输入选择地址由开关决定,0:按下,1:未按下
 
 Q      //输出,0:点亮,1:熄灭
 );
input   D;     //D锁存器输入
input   E;     //D锁存器输入
output  Q;     //D锁存器输出
reg    Q;     //寄存器说明
always @(D or E)    //一旦D或则E变化就执行
begin
 if(E)      //当E=1的时候D才可以赋值给Q,其它状态不执行
  Q <= D;
  else;
end
endmodule

编码器

module my_encode(
 I,      //输入由开关决定,0:按下,1:未按下
 Y      //输出,0:点亮,1:熄灭
 );
input  [3:0] I;    //输入4位
output [1:0] Y;     //输出2位
reg   [1:0] Y;     //always中需要寄存器定义
always @(I)     //一旦输入I变化就执行
begin
 case(I)     //用case语句来描述
  4′b0001: Y = 2′b00;   //I[0]为1的时候编码为0
  4′b0010: Y = 2′b01;   //I[1]为1的时候编码为1
  4′b0100: Y = 2′b10;   //I[2]为1的时候编码为2
  4′b1000: Y = 2′b11;   //I[3]为1的时候编码为3
  default: Y = 2′b00;  //其它方式为0,当多输入为1的时候就是这种情况
 endcase
end
endmodule

优先编码器

module my_encode1(
 I,      //输入由开关决定,0:按下,1:未按下
 Y      //输入由开关决定,0:按下,1:未按下
 );
input  [3:0] I;    //输入
output [1:0] Y;     //输出
reg   [1:0] Y;     //输出
always @(I)     //一旦I变化就执行
begin
 casex(I)      //优先编码器需要用casex来描述
  4′bxxx1: Y = 2′b00;   //I[0]为1的时候编码为0
  4′bxx1x: Y = 2′b01;   //I[1]为1的时候编码为1
  4′bx1xx: Y = 2′b10;   //I[2]为1的时候编码为2
  4′b1xxx: Y = 2′b11;   //I[3]为1的时候编码为3
  default: Y = 2′b00;  //其它状态的处理
 endcase
end
endmodule

状态机控制流水灯的方向

module state_machine(
 clk,        //48M
 reset,                                    //
 sel,        //01
 
 Q       //01
 );
input   clk;      //
input   reset;     //
input   sel;
 
output [3:0] Q;      //
reg   [3:0] Q;      //
 
wire    clk_out;     //1S
 
reg   [2:0] sts;
 
parameter   st1 = 2′b00,   //1
   st2 = 2′b01,   //2
   st3 = 2′b10,   //3
   st4 = 2′b11;   //4
 
/* */
always @(posedge clk_out or negedge reset)
begin
 if(!reset)
 begin
  Q      <= 4′b0000;   //0
  sts <= st1;
 end
 else
  case(sts)
            st1:       //1
   begin  
    Q [...]

  

Calendar

三月 2010
« 十    
1234567
891011121314
15161718192021
22232425262728
293031