Verilog——双向IO口的FPGA实现

双向IO口的FPGA实现

  • 双向IO口的Verilog试验
    • 主要功能
    • 模块代码
    • 仿真代码
    • 仿真结果

双向IO口的Verilog试验

主要功能

为深入理解双向端口的使用,进行本仿真试验,完成一个类似可修改数值的计数器。en_set为0时,双向IO口bio 输出模块内部计数器cnt的计数值;en_set为1时,bio输入数值对内部计数器cnt进行设置。主模块定义如下:

module stg
#
(
    parameter           WIDTH   =   7
)
(
    input               			clk             	,
    input               			rst_n           	,
    inout   [WIDTH:0]   	        bio                	,
    input               			en_set                  
);

bio为双向IO:
1)en_set为1时bio为输入口,将输入的数值赋值到cnt;
2)en_set为0时bio为输出口,输出cnt的数值。

模块代码

`timescale 1ns/1ps
module stg
#
(
    parameter           WIDTH   =   7
)
(
    input               clk             ,
    input               rst_n           ,
    inout   [WIDTH:0]   bio             ,
    input               en_set                  
);

    reg     [WIDTH:0]   cnt;
    always @(posedge clk or negedge rst_n) begin
        if(~rst_n)
            cnt <= 'd0;
        else if(en_set == 1'b1)
            cnt <= bio;
        else
            cnt <= cnt + 'd1;
    end
    
    
    assign bio = (en_set == 1'b1) ? 'bz : cnt;

endmodule

仿真代码

`timescale 1ns/1ps
module tb_stg;

reg                     clk             ;
reg                     rst_n           ;
wire        [7:0]       bio             ;
reg                     en_set          ;     

stg
#
(
.WIDTH              (7          )
)
u_stg
(
.clk                (clk        )           ,
.rst_n              (rst_n      )           ,
.bio                (bio        )           ,
.en_set             (en_set     )       
);

initial begin
    rst_n = 0;
    clk = 0;
    en_set = 0;
    #100;
    rst_n = 1;
    #1000;
    en_set = 1;
    #100;
    en_set = 0;
end

always #10 clk = ~clk;

assign bio = (en_set == 1'b1) ? 7'h68 : 7'hzz;

endmodule

仿真结果

Verilog——双向IO口的FPGA实现_第1张图片

你可能感兴趣的:(Verilog,verilog)