• 阶段二计数器练习13


      1 module cnt_test(
      2                 clk,
      3                 rst_n,
      4                 en1,
      5 //                en2,
      6 //                en3,
      7                 dout
      8 );
      9 
     10 input     clk;
     11 input     rst_n;
     12 input      en1;
     13 //input      en2;
     14 //input      en3;
     15 
     16 output [2:0] dout;
     17 
     18 reg [2:0]    dout;
     19 reg         flag_add;
     20 
     21 reg [3:0] cnt0;
     22 reg [3:0] cnt1;
     23 reg [3:0] x;
     24 reg [3:0] y;
     25 //reg [3:0] z;
     26 //reg [3:0] flag_sel;
     27  
     28 wire add_cnt0;
     29 wire end_cnt0;
     30 
     31 wire add_cnt1;
     32 wire end_cnt1;
     33 
     34 always @(posedge clk or negedge rst_n)begin
     35     if(!rst_n)begin
     36         cnt0 <= 0;
     37     end
     38     else if(add_cnt0)begin
     39         if(end_cnt0)begin
     40             cnt0 <= 0;
     41         end
     42         else begin
     43             cnt0 <= cnt0 + 1;
     44         end
     45     end
     46 end
     47 
     48 assign add_cnt0 = flag_add;
     49 assign end_cnt0 = add_cnt0 && cnt0 == x - 1; 
     50 
     51 always @(posedge clk or negedge rst_n)begin
     52     if(!rst_n)begin
     53         cnt1 <= 0;
     54     end
     55     else if(add_cnt1)begin
     56         if(end_cnt1)begin
     57             cnt1 <= 0;
     58         end
     59         else begin
     60             cnt1 <= cnt1 + 1;
     61         end
     62     end
     63 end
     64 
     65 assign add_cnt1 = end_cnt0;
     66 assign end_cnt1 = add_cnt1 && cnt1 == 3 - 1; 
     67 
     68 always @(posedge clk or negedge rst_n)begin
     69     if(!rst_n)begin
     70         flag_add <= 0;
     71     end
     72     else if(en1)begin
     73         flag_add <= 1;
     74     end
     75     else if(end_cnt1)begin
     76         flag_add <= 0;
     77     end
     78 end
     79 
     80 always @(posedge clk or negedge rst_n)begin
     81     if(!rst_n)begin
     82         dout <= 0;
     83     end
     84     else if(add_cnt0 && cnt0 == 1-1)begin
     85         dout <= y;
     86     end
     87     else if(end_cnt0)begin
     88         dout <= 0;
     89     end
     90 end
     91 
     92 always @(*)begin
     93     if(cnt1 == 0)begin
     94         x = 4;
     95         y = 3;
     96     end
     97     else if(cnt1 == 1)begin
     98         x = 3;
     99         y = 2;
    100     end
    101     else begin //省去if(cnt1 == 2) 
    102         x = 2;
    103         y = 1;
    104     end
    105 end
    106 
    107 endmodule

  • 相关阅读:
    NGINX -- 详解Nginx几种常见实现301重定向方法上的区别
    数据库外键的使用以及优缺点
    phpok -- 域名问题
    Sql Server系列:多表连接查询
    Go -- cron定时任务的用法
    JavaScript -- 清除缓存
    sql CAST用法
    Mock -- 数据模拟
    EsLint入门
    citus real-time 分析demo( 来自官方文档)
  • 原文地址:https://www.cnblogs.com/wen2376/p/15913762.html
Copyright © 2020-2023  润新知