|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 lilyzhong 于 2013-5-29 19:20 编辑
大家好,不知道这个题目的说法对不对,如果不对,请指正最近在看m0芯片的一段design start代码,有点不明白
主要是在testbench中定义了一个基于AHB-Lite总线协议的RAM
//RAM定义 大小为8M
localparam ram_log2 = 18;
reg [31:0] ram [0 : 2**ram_log2)-1];
//读取文件到RAM ram.bin是可执行文件
fd = $fopen("ram.bin","rb");
for (i = 0; (i < (2**ram_log2)) && ($fread(data,fd) != -1); i = i + 1)
ram = {data[7:0],data[15:8],data[23:16],data[31:24]};//此处为什么要讲数据翻转过来?
//是因为大小端的问题么,m0芯片定义的AHB-Lite接口用小端格式数据通道
//总线控制信号
always @(posedge HCLK)
if (HREADY) begin
htrans_last <= HTRANS;
hwrite_last <= HWRITE;
haddr_last <= HADDR;
hsize_last <= HSIZE;
end
//因为定义了一个TOP_OF_RAM=0x20000 这里只用到RAM的0---0x20000 低18位地址线寻址 高14位为0
wire hsel_ram = ~|haddr_last[31:ram_log2];
assign HRDATA[31:0] = hsel_ram ? ram[haddr_last[ram_log2+1:2]] : 32'd0;
reg [31:0] ram_tmp;
ram_tmp = ram[haddr_last[ram_log2+1:2]];
//这里为什么使用HADDR[19:2]寻址
HADDR[1:0]被作为控制信号,是否还作为地址的一部分?
//这部分是写数据到console
//看不懂HWDATA[7:0]与8‘hD之间的关系
always @(posedge HCLK)
if(HRESETn & HREADY & hwrite_last & hsel_tty & htrans_last[1]) begin
if(HWDATA[7:0] != 8'hD)
$write("%c", HWDATA[7:0]);
else begin
$display("%t: Simulation stop requested by CPU\n", $time);
$finish(2);
end
end
求解啊 |
|