Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Получение значения
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Алексей Т
Добрый день! Подскажите, пожалуйста, как получить значение из блока VHDL, а именно из вектора bcd1 или bcd10:
port( bin:in std_logic_vector(5 downto 0);
bcd1:out std_logic_vector(3 downto 0);
bcd10:out std_logic_vector(3 downto 0)
);
в регистр блока на Verilog:
module LCD_TEST (
input iCLK, iRST_N,
input wire [3:0] iTime1, // младшее число // шину я соединяю через wizard, но мне необходимо численное значение
input wire [3:0] iTime2, // старшее число

output LCD_ON, // LCD Power ON/OFF
output [7:0] LCD_DATA,
output LCD_RW,LCD_EN,LCD_RS
);

Я попробывал вот так:
reg [3:0] iT1 = iTime1[3:0];
reg [3:0] iT2 = iTime2[3:0];

Компилируется, но у меня сомнения что в iT1 и iT2 будут лежать значения векторов bcd1 и bcd10, соответсвенно.

egorman44
Цитата(Алексей Т @ Apr 9 2015, 10:24) *
reg [3:0] iT1 = iTime1[3:0];
reg [3:0] iT2 = iTime2[3:0];


На сколько я помню значение типу данных reg присваиваются в блоках always, а вышеописанным образом вы их инициализируете.

Код
reg [3:0] iT1;
reg [3:0] iT2;
always @(*) begin
  iT1 = iTime1;
  iT2 = iTime2;
end


Это если вы хотите , чтобы значение в регистрах изменялось асинхронно.
Ну и думается Вам надо как, то соединить эти два модуля, каким нибудь схемотехническим топовым модулем. Модуль на VHDL у Вас состоит их объявления портов, только ?
Алексей Т
Цитата(egorman44 @ Apr 9 2015, 20:39) *
На сколько я помню значение типу данных reg присваиваются в блоках always, а вышеописанным образом вы их инициализируете.

Код
reg [3:0] iT1;
reg [3:0] iT2;
always @(*) begin
  iT1 = iTime1;
  iT2 = iTime2;
end


Это если вы хотите , чтобы значение в регистрах изменялось асинхронно.
Ну и думается Вам надо как, то соединить эти два модуля, каким нибудь схемотехническим топовым модулем. Модуль на VHDL у Вас состоит их объявления портов, только ?

нет, там выполняются операции, вот это результат я хотел бы получать в reg блока на Verilog.
Код
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

-- For CONV_STD_LOGIC_VECTOR:
use ieee.std_logic_arith.all;

entity bin2bcd_5bit is
port( bin:in std_logic_vector(5 downto 0);
bcd1:out std_logic_vector(3 downto 0);
bcd10:out std_logic_vector(3 downto 0)
);

end bin2bcd_5bit;

architecture converter_behavior of bin2bcd_5bit is
begin
process(bin)
variable i : integer range 0 to 59;
variable i1 : integer range 0 to 9;
begin
i := conv_integer(bin);
i1 := i / 10;
bcd10 <= CONV_STD_LOGIC_VECTOR(i1, 4);
i1 := i rem 10;
bcd1 <= CONV_STD_LOGIC_VECTOR(i1, 4);
end process;
end converter_behavior;
egorman44
Цитата(Алексей Т @ Apr 9 2015, 10:43) *
нет, там выполняются операции, вот это результат я хотел бы получать в reg блока на Verilog.


Ну так соедините все это дело. Модуль VHDL и Verilog модуль, в топовом схематике.

UPD: Хотя как пишут, можно использовать оба модуля в проекте если Ваш синтезатор поддерживает оба языка, и в качестве топового модуля использовать HDL. Если выбрали в качестве топового модуля Verilog, то VHDL модуль объявите как если бы он был написан на Verilog'e.
Алексей Т
Цитата(egorman44 @ Apr 9 2015, 20:50) *
Ну так соедините все это дело. Модуль VHDL и Verilog модуль, в топовом схематике.

UPD: Хотя как пишут, можно использовать оба модуля в проекте если Ваш синтезатор поддерживает оба языка, и в качестве топового модуля использовать HDL. Если выбрали в качестве топового модуля Verilog, то VHDL модуль объявите как если бы он был написан на Verilog'e.


Спасибо, я это понял в качестве топового у меня "Графика"=)) у меня проблема записи значения из HDL блока, в блок на Verilog в reg.
Я так понял что присваивание надо выполнять в блоке always. Вот таким образом:
Код
reg iT1 = iTime1;

Или не так? Меня смущает что тип wire будет присвоен типу reg. Разърядность их одинакова (iT1 и iTime1).
des00
Цитата(Алексей Т @ Apr 9 2015, 15:24) *
Компилируется, но у меня сомнения что в iT1 и iT2 будут лежать значения векторов bcd1 и bcd10, соответсвенно.

сомнения правильные

Код
wire [3:0] iT1 = iTime1[3:0];
wire [3:0] iT2 = iTime2[3:0];

или

wire [3:0] iT1;
wire [3:0] iT2;

assign iT1 = iTime1[3:0];
assign iT2 = iTime2[3:0];

или

reg [3:0] iT1;
reg [3:0] iT2;

always @(*)
  iT1 = iTime1[3:0];
  iT2 = iTime2[3:0];
end
Алексей Т
Цитата(des00 @ Apr 9 2015, 22:50) *
сомнения правильные


Я заметил, что вы в списке чувствительности блока always указываете все сигналы модуля. Поэтому я опять в заблуждении. В инете скачал код, там вообще идёт так, например:
Код
always
begin
    case(iT2)
    0: ch2 <= 9'h130;
    1: ch2 <= 9'h131;
    2: ch2 <= 9'h132;
    3: ch2 <= 9'h133;
    4: ch2 <= 9'h134;
    5: ch2 <= 9'h135;
    6: ch2 <= 9'h136;
    7: ch2 <= 9'h137;
    8: ch2 <= 9'h138;
    9: ch2 <= 9'h139;
    default:    ch2 <= 9'dx;
    endcase
end

какой вариант более лучше по вашему мнению такой как у вас или вышеизложенный? Спасибо большое.
des00
Цитата(Алексей Т @ Apr 10 2015, 15:48) *
Я заметил, что вы в списке чувствительности блока always указываете все сигналы модуля. Поэтому я опять в заблуждении.

это не так. в верилоге запись always @(*) аналогична VHDL-2008 process(all). Т.е. это своего рода подстановка в список чувствительности процесса всех входных сигналов процесса. Т.е. это процессы описывающие комбинационную логику.
Цитата
какой вариант более лучше по вашему мнению такой как у вас или вышеизложенный? Спасибо большое.

Тот вариант что привели вы, будет моделироваться, но процесс будет вызываться в каждом дельта-цикле движка симулятора. Результат синтеза, будет зависеть от логики работы синтезатора, от нормальной работающей схемы, до полного игнорирования модуля. Нужно сделать список чувствительности и добавить в него сигнал iT2. Насчет выбора каждый решает сам, они одинаковые по функциональности, но на вкус и цвет все фломастеры разные.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.