Day16_mux4_1电路_AMAT计算

VHDL

library ieee;
use ieee.std_logic_1164.all;

entity mux4_1 is
    port(
        d0, d1, d2, d3 : in  std_logic;  -- 4个输入
        s              : in  std_logic_vector(1 downto 0);  -- 2位选择信号
        y              : out std_logic   -- 输出
    );
end mux4_1;

architecture when_else_arch of mux4_1 is
begin
    -- 条件赋值(优先级从高到低)
    y <= d3 when s = "11" else
         d2 when s = "10" else
         d1 when s = "01" else
         d0;  -- s = "00" 时默认选择 d0
end when_else_arch;

architecture with_select_arch of mux4_1 is
begin
    -- 选择赋值(必须覆盖所有可能情况)
    with s select
        y <= d0 when "00",
              d1 when "01",
              d2 when "10",
              d3 when "11",
              '0' when others;  -- 防止锁存器(others为冗余条件)
end with_select_arch;
    
architecture if_arch of mux4_1 is
begin
    process(s, d0, d1, d2, d3)  -- 敏感列表包含所有输入信号
    begin
        if s = "00" then
            y <= d0;
        elsif s = "01" then
            y <= d1;
        elsif s = "10" then
            y <= d2;
        else  -- s = "11"
            y <= d3;
        end if;
    end process;
end if_arch;

architecture case_arch of mux4_1 is
begin
    process(s, d0, d1, d2, d3)  -- 敏感列表包含所有输入信号
    begin
        case s is
            when "00"   => y <= d0;
            when "01"   => y <= d1;
            when "10"   => y <= d2;
            when "11"   => y <= d3;
            when others => y <= '0';  -- 防止锁存器
        end case;
    end process;
end case_arch;            

关键说明

  1. 输入/信号定义
    • s 为 2 位选择信号,覆盖 00011011 四种情况。
    • d0~d3 为四个输入信号,y 为输出信号。
  2. 防止锁存器
    • 在使用 caseif 时,必须覆盖所有可能的 s 值(如 others 分支),否则会生成锁存器。
    • 在并行语句(如 with-select)中,others 分支虽然冗余,但建议保留以增强代码健壮性。
  3. Quartus 实现步骤
    1. 新建 Quartus 工程,选择目标 FPGA 型号。
    2. 创建 VHDL 文件,粘贴上述代码(选择一种架构)。
    3. 编译并检查语法错误。
    4. 使用 RTL Viewer 查看综合后的电路结构。
    5. 编写测试波形验证功能(如 s 遍历所有值,观察 y 是否与预期一致)。

功能验证波形示例

s d3 d2 d1 d0 y
00 1 0 1 1 1
01 0 1 0 1 0
10 1 1 0 0 1
11 0 0 1 1 0

不同实现方式的对比

实现方式 优点 缺点
when-else 代码简洁,适合简单条件逻辑。 条件优先级固定,可能影响时序。
with-select 覆盖所有情况,避免锁存器。 需要显式列出所有分支。
if 语句 灵活,支持复杂条件嵌套。 需手动管理敏感列表,易遗漏信号。
case 语句 结构清晰,适合多分支选择。 必须覆盖所有可能值,否则生成锁存器。

根据设计需求选择合适的方式,优先推荐 with-selectcase(明确覆盖所有分支)。

每日一题

以下是一个常见的计算机组成原理面试题,涉及缓存系统和性能计算:


题目:
假设某计算机系统的存储层次结构如下:

  • L1缓存:访问时间为 1个时钟周期,命中率为 80%
  • L2缓存:访问时间为 10个时钟周期,命中率为 50%(仅在L1未命中时访问)
  • 主存:访问时间为 100个时钟周期(仅在L1和L2均未命中时访问)

问题:

  1. 计算该系统的平均内存访问时间(AMAT)
  2. 若将L2缓存的命中率提高到 70%(其他条件不变),AMAT会如何变化?性能提升百分比是多少?
  3. 如果要进一步优化系统性能,除了提高缓存命中率,还可以从哪些方面改进存储层次结构?

答案与解析:

1. 计算平均内存访问时间(AMAT)

公式:

AMAT=TL1+(1−HL1)×[TL2+(1−HL2)×TMem]AMAT=TL1+(1−HL1)×[TL2+(1−HL2)×TMem]

代入数据:

AMAT=1+(1−0.8)×[10+(1−0.5)×100]=1+0.2×[10+0.5×100]=1+0.2×(10+50)=1+0.2×60=1+12=13 个时钟周期AMAT=1+(1−0.8)×[10+(1−0.5)×100]=1+0.2×[10+0.5×100]=1+0.2×(10+50)=1+0.2×60=1+12=13 个时钟周期


2. L2命中率提高后的性能变化

新 AMAT:

AMATnew=1+0.2×[10+0.3×100]=1+0.2×(10+30)=1+0.2×40=1+8=9 个时钟周期AMATnew=1+0.2×[10+0.3×100]=1+0.2×(10+30)=1+0.2×40=1+8=9 个时钟周期

性能提升百分比:

提升=13−913×100%≈30.77%提升=1313−9×100%≈30.77%


3. 其他优化方向

  • 增加缓存容量或优化替换策略(如LRU→更智能的算法)。
  • 减少缓存访问延迟(如采用更快的SRAM或优化电路设计)。
  • 引入预取技术(提前加载可能被访问的数据)。
  • 使用多级缓存(如添加L3缓存,降低主存访问频率)。
  • 优化内存带宽(如采用DDR5或HBM技术)。

考察点:

  • 对缓存层次结构和AMAT公式的理解。
  • 命中率变化对系统性能的敏感性分析。
  • 对计算机系统优化的全局思考能力。

百词斩

posted @ 2025-03-17 22:25  Pikature  阅读(80)  评论(0)    收藏  举报