← FPGA数字IC知识手册

推荐答案 测试一下

Verilog中提供了两维数组来帮助我们建立内存的行为模型。具体来说,就是可以将内存定

编程题 中等 笔试真题

参考答案

该题要求设计一个带三态数据输出的存储器模块。首先,根据题目给出的Verilog二维数组语法,正确定义一个存储单元,例如 reg [7:0] mem [0:255]; 表示256个8位宽存储单元。读写操作可通过地址直接索引:写操作 mem[addr] = data_in; 读操作 data_out = mem[addr]; 若需读取特定位,需先读出整个字再截取。三态门用于控制数据输出,当使能有效时输出数据,否则输出高阻态(1'bz),实现多设备共享数据总线。综合设计如下: module memory_tri ( input clk, input rst_n, input [7:0] addr, input [7:0] data_in, input wr_en, input rd_en, // 读使能,控制三态输出 inout [7:0] data_io // 三态双向数据线 ); reg [7:0] mem [0:255]; reg [7:0] data_reg; // 写操作(同步):在时钟上升沿写入 always @(posedge clk or negedge rst_n) begin if (!rst_n) begin // 初始化可省略 end else if (wr_en) begin mem[addr] <= data_in; // 非阻塞赋值 end end // 读操作(同步):寄存输出 always @(posedge clk or negedge rst_n) begin if (!rst_n) begin data_reg <= 8'b0; end else if (rd_en) begin data_reg <= mem[addr]; end end // 三态门控制:rd_en有效时输出数据,否则高阻 assign data_io = rd_en ? data_reg : 8'bz; endmodule 该模块实现了同步写、同步读,并通过三态门实现双向数据线。注意:存储器建模时,写操作应使用非阻塞赋值以防止竞争;三态门在组合逻辑或assign中实现;读使能和写使能不可同时有效(或根据设计确定优先级)。易错点:误用阻塞赋值导致数据冲突;未正确处理复位信号;三态门使能逻辑错误导致总线冲突。

涉及知识点

  • Verilog二维数组定义存储器
  • 存储器同步读写建模
  • 三态门输出高阻态
  • 阻塞赋值与非阻塞赋值区别
  • 双向数据总线设计
  • 避免总线冲突
← 上一题
登录后反馈错题
下一题 →