(1)リスト1は,表1の真理値表の HA に対するテストベンチであ る

(1)リスト1は,表1の真理値表の HA に対するテストベンチであ
(2) リスト 2 は,図 2 の signal cs, rd の波形を生成するテスト
る。シミュレーション結果を図1に示せ。
ベンチ記述の一部である。リスト 2 を完成させなさい。
5ns 10ns
library ieee;
use ieee.std_logic_1164.all;
40ns
50ns
cs
entity TESTBENCH is
end TESTBENCH;
rd
architecture TB of TESTBENCH is
component HA is
port(
A, B : in std_logic;
C, S : out std_logic
);
end component;
signal a, b, c, s : std_logic;
begin
CUT : HA port map (A=>a, B=>b, C,=>c, S=>s);
process
begin
A => ’0’; B=>’0’;
wait for 10 ns;
B => ’1’;
wait for 10 ns;
A => ’1’; B=>’0’;
wait for 10 ns;
B => ’1’;
wait for 10 ns;
A => ’0’; B=>’0’;
wait;
end process;
end TB;
リスト 1
図2
【解】
architecture TB of TESTBENCH is
component EX1 is
port(
CS, RD : in std_logic;
D
: out std_logic_vector(7 downto 0)
);
end component;
signal cs, rd : std_logic;
signal d
: std_logic_vector(7 downto 0);
begin
CUT : EX1 port map (CS=>cs, RD=>rd, D=>d);
process
begin
cs <= ’1’; rd <= ’1’;
wait for 5 ns;
cs <= ’0’;
wait for 5 ns;
rd <= ’0’;
wait for 30 ns;
rd <= ’1’;
wait for 10 ns;
cs <= ’1’;
wait;
HA のテストベンチ記述
表1 HA の真理値表
入力
A
0
0
1
1
end process;
end RTL;
出力
B
0
1
0
1
C
0
0
0
1
end process;
end TB;
S
0
1
1
0
【解】
A
B
C
S
Z
0
10
20
30
40
50
図1 シミュレーション結果
以降このまま
t
60
t[ns]
(3)下記の同期式 12 進カウンタについて設問に答えなさい。
(4)下記の 4 ビット左シフトレジスタについて設問に答えなさい
【条件】
【条件】
① entity 名 counter12
② 入力ポート CLK, nRST
③ 出力ポート COUNT, CO
①entity 名 Shift_Reg
②入力ポート CLK, nRST
③出力ポート SR
【動作】
【動作】
①nRST=’0’で COUNT の値が初期化させる。また CO は0。
②CLK の立ち上がりで、COUNT の値が1増える。
③COUNT の初期値は”0000”
④CO は COUNT の値が最大値になると、1CLK 時間だけ、’1’
になる。
①nRST=’0’で SR の値が初期化させる。
②SR の初期値は”0001”とする。
③CLK の立ち上がりで、SR の値が 1 ビット左シフトする。
ただし、SR の最上位ビットは最下位ビットになる。
(1)entity 部を書きなさい。
(1)entity 部を書きなさい。
【解】
【解】
enitity counter12 is
port (
CLK, nRST : in std_logic;
COUNT
: out std_logic_vector(3 downto 0);
CO
: out std_logic
);
end counter12;
enitity Shift_Reg is
port (
CLK, nRST : in std_logic;
SR
: out std_logic_vector(3 downto 0)
);
end Shift_Reg;
(2)architecture 部を書きなさい。
(2)architecture 部を書きなさい。
【解】
【解】
architecture RTL of counter12 is
signal cnt : std_logic_vector(3 downto 0);
begin
process(CLK, nRST)
begin
if nRST = ’0’ then
cnt <= ”0000”;
elsif CLK’event and CLK=’1’
if cnt = ”1011” then
cnt <= ”0000”;
CO <= ’1’;
else
cnt <= cnt + ”0001”;
CO <= ’0’;
end if;
end if;
end process;
COUNT <= cnt;
end RTL;
architecture RTL Shift_Reg is
signal reg : std_logic_vector(3 downto 0);
begin
process(CLK, nRST)
begin
then
if nRST = ’0’ then
reg <= ”0001”;
elsif CLK’event and CLK=’1’ then
reg <= reg(2 downto 0) & reg(3);
end if;
end process;
SR <= reg;
end RTL;