欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 行为级建模

行为级建模

2025/9/26 14:04:21 来源:https://blog.csdn.net/m0_46644085/article/details/146093967  浏览:    关键词:行为级建模

1、结构化过程语句

        verilog有两种结构化过程语句:  always    initial

        verilog本质上是并发的。

//声明初值//方法一
reg    clk    ;
initialclk = 1'b0    ;//方法二
reg    clk = 1'b0    ;

 

2、过程赋值语句

                        阻塞赋值

                       非阻塞赋值

        非阻塞赋值可以避免竞争:

        第一种阻塞赋值会产生竞争的情况,a = b b = a 执行的先后取决与仿真器。

        第二种非阻塞赋值避免了竞争,达到了 交换 a  b 的效果。

//阻塞赋值
always@( posedge clk )begina = b ;end
always@( posedge clk )beginb = a ;end//非阻塞赋值
always@( posedge clk )begina <= b ;end
always@( posedge clk )beginb <= a ;end

3、时序控制

        verilog提供三种时序控制方法:

                                基于延迟的时序控制、基于事件的时序控制、电平敏感的时序控制

        基于延迟的时序控制      

initialbeginx = 1'b0    ;#10x = 1'b1    ;end

        基于事件的时序控制

                常规事件控制、命名事件控制、or事件控制、电平敏感时序控制

//命名事件控制event    received_data    ;always@( posedge clk )beginif( last_data )begin->received_data       ;endendalways@( received_data )begindata = .........    ;end

        ->received_data 表示事件的触发。关键词  event  表示  事件 。  

        电平敏感的时序控制

alwayswait(count_enable)  #20 count = count + 1'b1    ;

当 count_enable为 1 的时候执行,为0的时候仿真会不执行后面的语句,会停顿下来。

4、条件语句

if(      )beginend
else if(   )beginend
elsebeginend

5、多支路语句

        case casex casez

always@( posedge clk )begincase( {s1,s0} )2'd0:    out = in1    ;2'd1:    out = in2    ;2'd2:    out = in3    ;2'd3:    out = in4    ;default: out = in1    ;endcaseend

6、循环语句

        while                 for                        repeat                       forever

        

//whilewhile(  )beginend//forfor( ;  ; )beginend//repeatrepeat(128)    ;//循环128次//foreberinitialbeginforever #10  clk = ~clk ;end

7、顺序块和并行块

        顺序块:语句按照顺序执行。

                begin    end

                1、语句一条一条执行、

                2、延迟 是相对于前面那条语句的完成时间。

        并行块:所有语句一起执行。

                fork    join

        块语句的命名:

always@( posedge clk )begin:xxxxxxxxend

         块的禁用:disable

initialbegini = 0 ;begin: block1while( i < 16 )beginif(  )begindisable    block1    ;endendend    end

8、生成块

        

genvar    i ;generate    for( i = 0 ;i < 100 ;i=i+1 )beginend
endgenerate

9、demo  交通信号灯

code:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2025/03/07 15:34:34
// Design Name: 
// Module Name: sig_control
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//`define TURE    1'b1   
`define FALSE   1'b0//延迟
`define Y2R_DELAY   3
`define R2G_DELAY   2module sig_control(output  reg    [1:0]   hwy         ,output  reg    [1:0]   cntry       ,input   wire            x           ,input   wire            clk         ,input   wire            rst_n       );parameter   RED     =   2'd0    ;parameter   YELLOW  =   2'd1    ;parameter   GREEN   =   2'd2    ;//定义状态                         HEW      CNTRYparameter   S0  =   3'd0    ;//green        redparameter   S1  =   3'd1    ;//yellow       redparameter   S2  =   3'd2    ;//red          redparameter   S3  =   3'd3    ;//red          greenparameter   S4  =   3'd4    ;// red         yellowreg [2:0]   state           ;reg [2:0]   next_state      ;always@( posedge clk or negedge rst_n )beginif( rst_n == 0 )beginstate <= S0 ;endelsebeginstate <= next_state ;end   endalways@(*)begincase( state )S0:beginif( x == 1 )beginnext_state =    S1  ;endelsebeginnext_state  =   S0  ;endendS1:beginrepeat(`Y2R_DELAY) @(posedge clk)   ;next_state  =   S2  ;endS2:beginrepeat(`R2G_DELAY) @(posedge clk)   ;next_state  =   S3  ;                    endS3:beginif( x == 1 )beginnext_state = S3 ;endelsebeginnext_state = S4 ;                       endendS4:beginrepeat(`Y2R_DELAY) @( posedge clk )   ;next_state  =   S0  ;enddefault:beginnext_state  =   S0  ;endendcaseend    always@( posedge clk )begincase( state )S0:beginhwy    <=  GREEN        ;cntry  <=  RED          ;endS1:beginhwy    <=  YELLOW        ;cntry  <=  RED           ;endS2:beginhwy    <=  RED         ;cntry  <=  RED         ;endS3:beginhwy    <=  RED         ;cntry  <=  GREEN       ;endS4:beginhwy    <=  RED         ;cntry  <=  ~YELLOW     ;enddefault:beginhwy    <=  GREEN       ;cntry  <=  RED         ;endendcase end   endmodule

tb

 

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2025/03/07 15:35:01
// Design Name: 
// Module Name: tb_sig_control
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module tb_sig_control();wire [1:0]  MAIN_SIG ,CNTRY_SIG     ;reg         CAR_ON_CNTRY_RD         ;reg         clk,rst_n                 ;sig_control sig_control_inst(.hwy        (MAIN_SIG)          ,.cntry      (CNTRY_SIG)         ,.x          (CAR_ON_CNTRY_RD)   ,.clk        (clk)               ,.rst_n      (rst_n));initialbegin:monitor$monitor($time,"Main_sig = %b   Cntry_sig = %b CAR_ON_CNTRY_RD = %b ",MAIN_SIG,CNTRY_SIG,CAR_ON_CNTRY_RD )  ;endinitialbegin                                   //  clkclk = `TURE ;forever #5  clk = ~clk  ;endinitial                                 //rstbeginrst_n =   1'b0    ;repeat(5)   @( posedge clk )    ;rst_n =   1'b1    ;      endinitialbeginCAR_ON_CNTRY_RD =   1'b0    ;repeat  (20)    @( posedge clk )    ;CAR_ON_CNTRY_RD =   1'b1    ;repeat  (10)    @( posedge clk )    ;CAR_ON_CNTRY_RD =   1'b0    ;repeat  (20)    @( posedge clk )    ;CAR_ON_CNTRY_RD =   1'b1    ;repeat  (10)    @( posedge clk )    ;CAR_ON_CNTRY_RD =   1'b0    ;repeat  (20)    @( posedge clk )    ;CAR_ON_CNTRY_RD =   1'b1    ;repeat  (10)    @( posedge clk )    ;CAR_ON_CNTRY_RD =   1'b0    ;repeat ( 10 )   @( posedge clk )    ;$stop   ;                        endendmodule

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com