1,编译通过。
2,需要编写驱动。
module wb_io
#(parameter CH_WIDTH=16)(
input clk,
input wb_rd ,wb_wr,
input rst,
input [1:0]wb_addr,
input [31:0]wb_din,
output reg [31:0]wb_dout,
inout [CH_WIDTH-1:0]io
);
reg [CH_WIDTH-1:0]oen;
reg [CH_WIDTH-1:0]d_out;
always @ (posedge clk)
if (wb_wr) case (wb_addr[1:0])
0:d_out[CH_WIDTH-1:0]<=wb_din[CH_WIDTH-1:0];
1:oen[CH_WIDTH-1:0]<=wb_din[CH_WIDTH-1:0];
endcase
always @ (posedge clk)
wb_dout[CH_WIDTH-1:0]<=io[CH_WIDTH-1:0];
genvar i;
generate
for(i=0;i<CH_WIDTH;i=i+1)
begin : gen16
assign io[i] = (oen[i])?d_out[i] :1'bz;
end
endgenerate
endmodule

本文介绍了一个使用Verilog编写的WB_IO模块,该模块包括输入时钟、读写信号等,并通过输入地址选择不同的操作。文章详细展示了如何在时钟上升沿更新内部寄存器,并实现了一个双向I/O口的功能。
1711

被折叠的 条评论
为什么被折叠?



