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;
关键说明
- 输入/信号定义
s为 2 位选择信号,覆盖00、01、10、11四种情况。d0~d3为四个输入信号,y为输出信号。
- 防止锁存器
- 在使用
case或if时,必须覆盖所有可能的s值(如others分支),否则会生成锁存器。 - 在并行语句(如
with-select)中,others分支虽然冗余,但建议保留以增强代码健壮性。
- 在使用
- Quartus 实现步骤
- 新建 Quartus 工程,选择目标 FPGA 型号。
- 创建 VHDL 文件,粘贴上述代码(选择一种架构)。
- 编译并检查语法错误。
- 使用 RTL Viewer 查看综合后的电路结构。
- 编写测试波形验证功能(如
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-select 或 case(明确覆盖所有分支)。
每日一题
以下是一个常见的计算机组成原理面试题,涉及缓存系统和性能计算:
题目:
假设某计算机系统的存储层次结构如下:
- L1缓存:访问时间为 1个时钟周期,命中率为 80%
- L2缓存:访问时间为 10个时钟周期,命中率为 50%(仅在L1未命中时访问)
- 主存:访问时间为 100个时钟周期(仅在L1和L2均未命中时访问)
问题:
- 计算该系统的平均内存访问时间(AMAT)。
- 若将L2缓存的命中率提高到 70%(其他条件不变),AMAT会如何变化?性能提升百分比是多少?
- 如果要进一步优化系统性能,除了提高缓存命中率,还可以从哪些方面改进存储层次结构?
答案与解析:
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公式的理解。
- 命中率变化对系统性能的敏感性分析。
- 对计算机系统优化的全局思考能力。
百词斩


浙公网安备 33010602011771号