[求助] 一段vorilog 代码看不懂,望帮忙解答

loveBT   2011-2-16 14:20 楼主
module single_port_ram
(
        input [7:0] data,
        input [5:0] addr,
        input we, clk,
        output [7:0] q
);

        // Declare the RAM variable
        reg [7:0] ram[63:0];
       
        // Variable to hold the registered read address
        reg [5:0] addr_reg;
       
        always @ (posedge clk)
        begin
        // Write
                if (we)
                        ram[addr] <= data;
               
                addr_reg <= addr;
               
        end
               
                assign q = ram[addr_reg];
       
endmodule
这段代码中的ram[addr_reg],是什么意思?

回复评论 (5)

关键看懂这句 reg [7:0] ram[63:0];
这是verilog语言里面描述数组的概念。reg [7:0] 定义了存储器中每个存储单元的大小,即ram是一个8位的寄存器。ram后面的[63:0]定义了有64个这样的寄存器,可以理解为地址。参考夏老师的书memory型的介绍。

这样就可以理解上面的代码了,输入了一个地址addr,输出了这个地址的数据assign q = ram[addr_reg];
点赞  2011-2-16 15:17
ram的位宽为8位,addr_reg其实就是地址值,ram有64个8位,ram[addr_reg]对应的地址为addr_reg的ram值
点赞  2011-2-16 20:20
学习了。
点赞  2011-2-16 22:50

学习了

http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2011-2-17 09:51

不错,学习了!

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-2-17 09:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复