verilog习题

1. 设计一个三级流水线处理器。该处理器的阶段是获取,解码和执行。在解码阶段,对指令进行解码,并选择必要的寄存器,并计算加载和存储指令的地址。在执行阶段,ALU操作完成,结果保存在目标寄存器中。显示如何通过这些流水线阶段执行以下代码。在需要的stall。

R1 <= M[address]
R2 <= R2 + 1
R3 <= R3 - R4
R5 <= R5 - R6
Branch X
. . .
X: R7<=R7–1
F (Fetch) D(Decode) E(Execute)

2. 设计一个具有字节可寻址主内存(带定时器)和仲裁器的系统的CPU,用于授予主CPU内存总线。 CPU有32位数据和地址端口。使用memRead或MemWrite信号由CPU发出仲裁。对于读写,4字节数据在CPU和存储器之间传输。 A)显示此系统的结构以及CPU,仲裁器,系统总线和主存储器之间的信号(仅显示信号,无需时间)。 B)现在,添加一个带有8个32位块的128字节高速缓存。显示系统的新结构和新信号。显示完整的Cache系统如何位于CPU-Bus-Memory系统中,以及如何修改信号以适应Cache。假设该系统的内存端已经有一个用于将4个字节转换为或从存储器转换为32位用于读取或写入操作的缓冲区。

3.设计一个带有8个1字节块的双向组相关缓存,32字节存储器和5位地址总线CPU的系统。该系统的原理图如图1所示。一些数据存储在Cache和Main内存中,如图所示。一个示例代码运行一个保存在以下地址中的程序。对于这里显示的地址,显示它是否是缓存内存的命中或错误访问,并解释为什么。缓存存储器的替换策略是基于最初编号方式的块首先被覆盖的路数。

代码如下,供参考。状态转换图可以根据代码画出。

//=========================================
always@(posedge clk or negedge clr)
if (clr)
ab <= 2'b00;
if (st == st10010)
ab <= 2'b10;
else
ab <= 2'b01;

always@(posedge clk or negedge clr)
if (clr)
st <= 3'b0;
else
st <= next_st;
//
always@(*)
case(st)///定义6个状态st
st0 :if (di) next_st = st1; else next_st = st0;
st1 :if (di) next_st = st1; else next_st = st10;
st10 :if (di) next_st = st1; else next_st = st100;
st100 :if (di) next_st = st1001; else next_st = st0;
st1001 :if (di) next_st = st1; else next_st = st10010;
st10010 :if (di) next_st = st1; else next_st = st100; ////如果允许序列重叠
st10010 :next_st = st0;//如果不允许序列重叠
default :next_st = st0;
endcase
温馨提示:答案为网友推荐,仅供参考
相似回答