全加算器のキャリー生成回路
掲載ページ:47、リスト番号:3.1
【VHDL記述】
library IEEE;
use IEEE.std_logic_1164.all;
entity FA_CARRY is
port ( A, B, C : in std_logic;
CO : out std_logic );
end FA_CARRY;
architecture TRUTH_TABLE of FA_CARRY is
signal INDATA : std_logic_vector(2 downto 0);
begin
INDATA <= A & B & C;
process (INDATA) begin
if (INDATA = "000") then
CO <= '0';
elsif (INDATA = "001") then
CO <= '0';
elsif (INDATA = "010") then
CO <= '0';
elsif (INDATA = "011") then
CO <= '1';
elsif (INDATA = "100") then
CO <= '0';
elsif (INDATA = "101") then
CO <= '1';
elsif (INDATA = "110") then
CO <= '1';
else
CO <= '1';
end if;
end process;
end TRUTH_TABLE;
【Verilog-HDL記述】
module FA_CARRY (
A, B, C,
CO
);
input A, B, C;
output CO;
wire[ 2 : 0 ] INDATA;
assign INDATA = { A, B, C };
assign CO = FUNC_CO( INDATA );
// function定義
function FUNC_CO;
input[ 2 : 0 ] INDATA;
begin
if ( INDATA == 3'b000 ) begin
FUNC_CO = 1'b0;
end else if ( INDATA == 3'b001 ) begin
FUNC_CO = 1'b0;
end else if ( INDATA == 3'b010 ) begin
FUNC_CO = 1'b0;
end else if ( INDATA == 3'b011 ) begin
FUNC_CO = 1'b1;
end else if ( INDATA == 3'b100 ) begin
FUNC_CO = 1'b0;
end else if ( INDATA == 3'b101 ) begin
FUNC_CO = 1'b1;
end else if ( INDATA == 3'b110 ) begin
FUNC_CO = 1'b1;
end else begin
FUNC_CO = 1'b1;
end
end
endfunction
endmodule
【合成結果】