我已经在Xilinx中使用VHDL设计了MIPS单周期处理器。抽象设计基于Patterson和Henessy所提供的理论。完成设计后,我运行了很少的汇编代码来检查其功能,并得出了预期的结果。
我的问题是设计摘要报告(“ .SYR”文件)中的“时序摘要”。
每次更改存储在指令存储器(即我的ROM)中的汇编代码时,单周期处理器的最小时钟周期都会不断变化。我不太了解原因?

时序摘要:
---------------
速度等级:-4

最小周期:17.561ns(最大频率:56.945MHz)
时钟之前的最小输入到达时间:找不到路径
时钟后最大输出所需时间:16.296ns
最大组合路径延迟:找不到路径

时序细节:
--------------
所有值以纳秒(ns)为单位显示

================================================== =======================
时序约束:时钟“ clk”的默认周期分析
时钟周期:17.561ns(频率:56.945MHz)
路径/目标端口总数:6965792/616
-------------------------------------------------- -----------------------
延迟:17.561ns(逻辑电平= 22)
来源:MIPS_processor_unit / Datapath_comp / PC_reg / q_5_1(FF)
目的地:MIPS_processor_unit / Datapath_comp / RegF / memory_0_0(FF)
源时钟:clk上升
目标时钟:clk上升

数据路径:MIPS_processor_unit / Datapath_comp / PC_reg / q_5_1到MIPS_processor_unit / Datapath_comp / RegF / memory_0_0
门网
单元格:输入->输出扇出延迟延迟逻辑名称(网络名称)
---------------------------------------- ---------- -
FDCE:C-> Q 2 0.591 0.622 MIPS_processor_unit / Datapath_comp / PC_reg / q_5_1 >>(MIPS_processor_unit / Datapath_comp / PC_reg / q_5_1)
LUT2_L:I0-> LO 1 0.704 0.104 Instruction_memory_unit / Mrom_Instruction_out391220_SW0(N1361)
LUT4:I3-> O 3 0.704 0.535 Instruction_memory_unit / Mrom_Instruction_out391236_SW0(N141)
LUT4:I3-> O 17 0.704 1.051 Instruction_memory_unit / Mrom_Instruction_out391236(Instruction_tl_s)
MUXF5:S-> O 2 0.739 0.526 MIPS_processor_unit / Datapath_comp / RegF / mux8_8_f5(MIPS_processor_unit / Datapath_comp / RegF / mux8_8_f5)
LUT4:I1-> O 1 0.704 0.000 MIPS_processor_unit / Datapath_comp / ALUSrc_mux / y1_F(N276)
MUXF5:I0-> O 3 0.321 0.610 MIPS_processor_unit / Datapath_comp / ALUSrc_mux / y1(MIPS_processor_unit / Datapath_comp / ALU_2nd_input_s)
LUT2:I1-> O 1 0.704 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_lut(MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_lut)
MUXCY:S-> O 1 0.464 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy)
MUXCY:CI-> O 1 0.059 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy)
MUXCY:CI-> O 1 0.059 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy)
MUXCY:CI-> O 1 0.059 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy)
MUXCY:CI-> O 1 0.059 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy)
MUXCY:CI-> O 1 0.059 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy)
MUXCY:CI-> O 0 0.059 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_cy)
XORCY:CI-> O 1 0.804 0.424 MIPS_processor_unit / Datapath_comp / ALU_comp / Msub_y_sig_addsub0001_xor(MIPS_processor_unit / Datapath_comp / ALU_comp / y_sig_addsub0001)
LUT4:I3-> O 1 0.704 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / y_sig_mux0000_f5_G(N237)
MUXF5:I1-> O 259 0.321 1.334 MIPS_processor_unit / Datapath_comp / ALU_comp / y_sig_mux0000_f5(Output_address_0_OBUF)
RAM32X1S:A0-> O 1 1.025 0.499 Data_memory_unit / Mram_data_mem1(N10)
LUT3:I1-> O 1 0.704 0.000 inst_LPM_MUX_6(inst_LPM_MUX_6)
MUXF5:I0-> O 1 0.321 0.000 inst_LPM_MUX_4_f5(inst_LPM_MUX_4_f5)
MUXF6:I0-> O 1 0.521 0.455 inst_LPM_MUX_2_f6(Read_data_tl_s)
LUT3:I2-> O 8 0.704 0.000 MIPS_processor_unit / Datapath_comp / WB_mux / y1(MIPS_processor_unit / Datapath_comp / write_data_s)
FDCE:D 0.308 MIPS_processor_unit / Datapath_comp / RegF / memory_0_0
----------------------------------------
总计17.561ns(逻辑11.401ns,路由6.160ns)
(64.9%逻辑,35.1%路线)

================================================== =======================




时序摘要:
---------------
速度等级:-4

最小周期:13.551ns(最大频率:73.798MHz)
时钟之前的最小输入到达时间:找不到路径
时钟后最大输出所需时间:14.466ns
最大组合路径延迟:找不到路径

时序细节:
--------------
所有值以纳秒(ns)为单位显示

================================================== =======================
时序约束:时钟“ clk”的默认周期分析
时钟周期:13.551ns(频率:73.798MHz)
路径/目标端口总数:256927/278
-------------------------------------------------- -----------------------
延迟:13.551ns(逻辑电平= 13)
资料来源:MIPS_processor_unit / Datapath_comp / PC_reg / q_6(FF)
目的地:MIPS_processor_unit / Datapath_comp / PC_reg / q_2(FF)
源时钟:clk上升
目标时钟:clk上升

数据路径:MIPS_processor_unit / Datapath_comp / PC_reg / q_6到MIPS_processor_unit / Datapath_comp / PC_reg / q_2
门网
单元格:输入->输出扇出延迟延迟逻辑名称(网络名称)
---------------------------------------- ---------- -
FDCE:C-> Q 71 0.591 1.354 MIPS_processor_unit / Datapath_comp / PC_reg / q_6(MIPS_processor_unit / Datapath_comp / PC_reg / q_6)
LUT3_D:I1-> O 8 0.704 0.761 Instruction_memory_unit / Mrom_Instruction_out4711110(N91)
LUT4:I3-> O 17 0.704 1.051 Instruction_memory_unit / Mrom_Instruction_out43111_2(Instruction_memory_unit / Mrom_Instruction_out43111_1)
MUXF5:S-> O 1 0.739 0.000 MIPS_processor_unit / Datapath_comp / RegF / mux3_7_f5_0(MIPS_processor_unit / Datapath_comp / RegF / mux3_7_f51)
MUXF6:I0-> O 1 0.521 0.424 MIPS_processor_unit / Datapath_comp / RegF / mux3_5_f6_0(MIPS_processor_unit / Datapath_comp / RegF / mux3_5_f61)
LUT4:I3-> O 1 0.704 0.424 MIPS_processor_unit / Datapath_comp / RegF / read_data_11(MIPS_processor_unit / Datapath_comp / read_data_1_s)
LUT4:I3-> O 1 0.704 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_lut(MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_lut)
MUXCY:S-> O 1 0.464 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_cy)
MUXCY:CI-> O 1 0.059 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_cy)
MUXCY:CI-> O 1 0.059 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_cy)
MUXCY:CI-> O 0 0.059 0.000 MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_cy(MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_cy)
XORCY:CI-> O 18 0.804 1.072 MIPS_processor_unit / Datapath_comp / ALU_comp / Maddsub_y_sig_addsub0000_xor(MIPS_processor_unit / Datapath_comp / write_data_s)
LUT4_D:I3-> O 5 0.704 0.637 MIPS_processor_unit / Controller_comp / PCSrc9(MIPS_processor_unit / Controller_comp / PCSrc9)
LUT4:I3-> O 1 0.704 0.000 MIPS_processor_unit / Datapath_comp / Jump_mux / y1(MIPS_processor_unit / Datapath_comp / Next_PC_1_s)
FDCE:D 0.308 MIPS_processor_unit / Datapath_comp / PC_reg / q_6
----------------------------------------
总计13.551ns(逻辑7.828ns,路由5.723ns)
(逻辑57.8%,路线42.2%)

================================================== =======================


可以看出,我给了Instruction_memory_unit两个不同的汇编代码和单周期处理器更改的最短时间,这是我的疑问:

1)每次更改汇编代码时,xilinx都会根据我在汇编代码中指定的指令来评估关键路径吗?如果为“是”,那么我应该如何获得设计的一般最短期限?

2)我有RegF作为我的寄存器文件,它基本上是包含MIPS处理器的32个寄存器的RAM。我不明白的是,在这两个时序摘要中,“门延迟+净延迟”是不同的。从理论上讲,寄存器文件作为存储器不应该具有固定的读取时间吗?

最佳答案

它可能会将ROM合成为门,LUT或SRL16。 ...检查设备使用情况(就在.syr文件中的时序报告之前),以查看其是否正在使用ROM的块存储器-可能不是。

实际上,根据时序报告,这似乎确实是个问题:那里有很多LUT,而且没有BRAM的迹象。

如果这是问题所在,请在Xilinx约束指南中查找“ attribute ram_style = blockram”(我的spellisg / syntax可能略有错误)-如果将其应用于包含ROM的阵列,则可以克服这一问题。一旦数据存储在内存中,时序应该更加稳定。

注意BlockRams是同步的:您在一个时钟周期内显示地址,并在一个周期后获取内容。如果那不符合您的流水线模型,则必须重新考虑这一点,以便让综合在块存储器中实现ROM。

关于mips - Xilinx设计的最小时钟周期随着输入的变化而变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28590168/

10-15 01:02
查看更多