mat7labs的个人空间 https://blog.eetop.cn/1631436 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

usb的verilog代码

热度 1已有 2940 次阅读| 2020-3-23 14:59 |系统分类:芯片设计

module USB  ( rst  ,
                  clk,
                             
                  fifo_wr ,
                  fifo_rd ,            
                  fifo_data,
                             
                  fifo_pf,
                  fifo_full,
                  fifo_empty,
                );
                
 input           rst     ;
 input           clk     ;
 input           fifo_pf,fifo_full,fifo_empty;
 
 output[7:0]     fifo_data ;
 output          fifo_wr   ;
 output          fifo_rd   ;
 
 
 //ports
 wire            rst       ;  
 wire            clk     ;  
                              
 reg [7:0]       fifo_data ;  
 reg             fifo_wr   ;  
 reg             fifo_rd   ;  
                              
 
 //internal signals
 reg             clkin;
 reg  [2:0]      STATE,NEXT;
 
 //parameters
 parameter     IDLE     = 3'D0,
               WRITE_1  = 3'D1,
               WRITE_2  = 3'D2;
               
 //Div clk by 2
 always @ (posedge clk or negedge rst)
 begin
   if(!rst)
      clkin <= 'b1;
   else
      clkin <= ~clkin;
 end 
 
 
 //state machine              
 always @ (STATE or rst)
 begin
     case(STATE)
     IDLE    :  NEXT = WRITE_1;
              
     WRITE_1 : if(!fifo_full)
                   NEXT = WRITE_1;
               else
                   NEXT = WRITE_2;
     WRITE_2 :     NEXT = WRITE_1;
     default : NEXT = IDLE ;
     endcase
 end
 
 //registe the state
 always @ (posedge clkin or negedge rst)
 if(!rst)
    STATE <= IDLE;
 else
    STATE <= NEXT;
 
 
 always @ (posedge clkin or negedge rst)
 if(!rst)
    begin
        fifo_data  <=8'hff;
        fifo_wr   <=1'b1;
        fifo_rd   <=1'b1;
    end
 else
    case(STATE)
    IDLE    : begin
                  fifo_rd     <= 1;
                  fifo_wr     <= 1;
              end
    WRITE_1 : begin
                  if(fifo_full)
                     fifo_data <= fifo_data + 1;
                  fifo_wr     <= 1'b0;
                  fifo_rd     <= 1'b1;
              end
    WRITE_2 : begin
                  fifo_wr  <= 1'b1;
                  fifo_rd  <= 1'b1;
              end
    endcase

  
endmodule           

点赞

评论 (0 个评论)

facelist

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

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 3

    获赞
  • 2

    评论
  • 访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-24 22:12 , Processed in 0.018315 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部