Изображение DUT
Я пытаюсь написать внутреннюю передачу полубайта, защищенную битом четности.
Для этого я хочу написать логику передатчика / приемника, которая показана на рисунке.
Итак, у меня есть 4-битный входной вектор, и я сгенерирую для него бит четности, и вот моя проблема.
Я хочу прикрепить бит четности к входному вектору. Но входной вектор всего 4 бита. Есть ли способ изменить его размер, просто прикрепив бит четности к входному вектору, или мне нужно передавать бит четности отдельно?
И как маленький побочный вопрос по отношению ко всей реализации:
Нужно ли создавать отдельные процессы для приемника и передатчика, как в моем коде, или мне просто нужно написать один процесс, содержащий оба?
Моя первая идея состояла в том, чтобы просто использовать внутренний вектор с 5 битами для присоединения бита четности, но проблема в том, что мне нужен только данный вход как выход в конце, и есть та же проблема. В процессе проверки четности я должен заполнить выходной вектор, который является 4-битным, внутренним 5-битным вектором и не знаю, работает ли он просто так, как я пытался в своем коде.
Я надеюсь, вы понимаете проблему.
Спасибо.
architecture rtl of odd parity is
signal rxdat_s : out std_logic_vector(3 downto 0);
signal ok_s : out std_logic;
signal txdat_s : in std_logic_vector(3 downto 0);
signal secured_s : std_logic_vector (4 downto 0);
begin
odd_parity_gen: process ( txdat_s, clk ) is
variable txdat_v : std_logic_vector(3 downto 0);
variable secured_v : std_logic_vector(4 downto 0);
variable odd_parity_v : integer;
begin
txdat_v := txdat_s;
odd_parity_v := xnor txdat_v;
secured_v := txdat_v + odd_parity_v;
secured_s <= secured_v;
end process odd_parity_gen;
odd_parity_check: process () is
variable ok_v : integer;
variable rxdat_v : std_logic_vector(3 downto 0);
variable secured_v : std_logic_vector(4 downto 0);
begin
rxdat_v := rxdat_s;
secured_v := secured_s;
ok_v := ok_s;
ok_v := xnor secured_v;
rxdat_v := secured_v;
ok_s <= ok_v;
rxdat_s <= rxdat_v;
reg: process ( clk ) is
begin
if rising_edge (clk) then
if nres = '0' then
--reset all signals
else
--main logic
end if;
end if;
end process;