з неперервних операторів присвоювання VERILOG

S

saurster

Guest
HI
У мене є своєрідні проблеми.Ніколи не бачив цю b4.Я намагаюся моделювати портів, які двонаправленим.Я використовую неперервних операторів присвоювання для присвоєння значень ліній введення-виведення з регістрів.Наприклад,
/ / Код
призначити IO_1 = reg1 [0];
призначити IO_2 = reg1 [1];
.....
.....
disc18 де це зареєструватися.Маю 8 регістри тобто 64 ліній введення-виведення.Коли я SIM моєї конструкції, IO_1 до IO_19 призначені правильно, однак всі операції введення
/ виводу, які після затвердження питань.Після вивчення моделі потоків даних з'ясовується, що біти регістра 3 до регістрів 8 є рушійною декількома лініями введення-виведення, навіть якщо ці IO лініях присвоюється індивідуальний з різних біти різних регістрів.
Поняття не маю.Якщо хто-небудь знає що-небудь, я буду вдячна
спасибо
-Saurster
фактичний код повинен бути наступнимМодуль test_io (IO_1, IO_2, IO_3, IO_4, IO_5, IO_6, IO_7, IO_8, IO_9, IO_10,
IO_11, IO_12, IO_13, IO_14, IO_15, IO_16, IO_17, IO_18, IO_19, IO_20,
IO_21, IO_22, IO_23, IO_24, IO_25, IO_26, IO_27, IO_28, IO_29, IO_30,
IO_31, IO_32, IO_33, IO_34, IO_35, IO_36, IO_37, IO_38, IO_39, IO_40,
IO_41, IO_42, IO_43, IO_44, IO_45, IO_46, IO_47, IO_48, IO_49, IO_50,
IO_51, IO_52, IO_53, IO_54, IO_55, IO_56, IO_57, IO_58, IO_59, IO_60,
IO_61, IO_62, IO_63, IO_64, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9,
A10, A11, A12, A13, A14, A15, D, pclk, Reset, WE_N, RD_N, ALE, hw0, HW1, HW2, HW3);INOUT IO_1, IO_2, IO_3, IO_4, IO_5, IO_6, IO_7, IO_8, IO_9, IO_10;
INOUT IO_11, IO_12, IO_13, IO_14, IO_15, IO_16, IO_17, IO_18, IO_19, IO_20;
INOUT IO_21, IO_22, IO_23, IO_24, IO_25, IO_26, IO_27, IO_28, IO_29, IO_30;
INOUT IO_31, IO_32, IO_33, IO_34, IO_35, IO_36, IO_37, IO_38, IO_39, IO_40;
INOUT IO_41, IO_42, IO_43, IO_44, IO_45, IO_46, IO_47, IO_48, IO_49, IO_50;
INOUT IO_51, IO_52, IO_53, IO_54, IO_55, IO_56, IO_57, IO_58, IO_59, IO_60;
INOUT IO_61, IO_62, IO_63, IO_64;/ / Мікропроцесорні автобус
введення A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15;
введення pclk;
введення RESET;
введення WE_N, RD_N, ALE;
введення hw0, HW1, HW2, HW3;
Брати Карамазови [0:7] D;

/ / Внутрішні визначення
REG [0:7] data2proc;
/ / Reg [0:7] datafromproc;
дроту [15:0] адресу;

REG [0:7] disc18;
REG [0:7] disc916;
REG [0:7] disc1724;
REG [0:7] disc2532;
REG [0:7] disc3340;
REG [0:7] disc4148;
REG [0:7] disc4956;
REG [0:7] disc5764;

REG [0:7] напрямку;
дріт [3:0] HW;

Параметр [15:0] add1 = 16'hc010,
ADD2 = 16'hc011,
add3 = 16'hc012,
add4 = 16'hc013,
add5 = 16'hc014,
add6 = 16'hc015,
add7 = 16'hc016,
add8 = 16'hc017;

параметр [3:0] INVALID1 = 4'h0,
CD = 4'h1,
NAV = 4'h2,
INVALID2 = 4'hf;

присвоїти адресу = (~ ALE)?(A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0): 16'hz;
призначити HW = (HW3, HW2, HW1, hw0);

/ *
Завжди @ (WE_N або ALE або D або адреса)
починати
випадок (адреса)
Dir: початок
якщо ((~ WE_N) & & (~ ALE))
починати
Direction = D;
кінець
кінець
ENDCASE
кінець * /

Завжди @ (HW)
починати
випадок (HW)
INVALID1: початок
Direction = 8'hff;
кінець
CD: початок
Direction = 8'b00000000;
кінець
ВЧА: початок
Direction = 8'b11000000;
кінець
INVALID2: початок
Direction = 8'h00;
кінець
ENDCASE
кінець

призначити D = ((~ RD_N) & & (~ ALE))?data2proc: 8'bz;

Завжди @ (адреса або напрям або WE_N або ALE або D або
IO_1 або IO_2 або IO_3 або IO_4 або IO_5 або IO_6 або IO_7 або IO_8 або
IO_9 або IO_10 або IO_11 або IO_12 або IO_13 або IO_14 або IO_15 або IO_16 або
IO_17 або IO_18 або IO_19 або IO_20 або IO_21 або IO_22 або IO_23 або IO_24 або IO_25 або IO_26 або
IO_27 або IO_28 або IO_29 або IO_30 або IO_31 або IO_32 або IO_33 або IO_34 або IO_35 або IO_36 або
IO_37 або IO_38 або IO_39 або IO_40 або IO_41 або IO_42 або IO_43 або IO_44 або IO_45 або IO_46 або
IO_47 або IO_48 або IO_49 або IO_50 або IO_51 або IO_52 або IO_53 або IO_54 або IO_55 або IO_56 або
IO_57 або IO_58 або IO_59 або IO_60 або IO_61 або IO_62 або IO_63 або IO_64)
починати
випадок (адреса)
add1: початок
якщо (у напрямку [0])
починати
data2proc = (IO_1, IO_2, IO_3, IO_4, IO_5, IO_6, IO_7, IO_8);
кінець
Else If ((~ напрямку [0]) & & (~ WE_N) & & (~ ALE))
починати
disc18 <= D;
кінець
кінець
ADD2: початок
якщо (у напрямку [1])
починати
data2proc <= (IO_9, IO_10, IO_11, IO_12, IO_13, IO_14, IO_15, IO_16);
кінець
Else If ((~ напрямку [1]) & & (~ WE_N) & & (~ ALE))
починати
disc916 <= D;
кінець
кінець
add3: початок
якщо (у напрямку [2])
починати
data2proc <= (IO_17, IO_18, IO_19, IO_20, IO_21, IO_22, IO_23, IO_24);
кінець
Else If ((~ напрямку [2]) & & (~ WE_N) & & (~ ALE))
починати
disc1724 <= D;
кінець
кінець
add4: початок
якщо (у напрямку [3])
починати
data2proc <= (IO_25, IO_26, IO_27, IO_28, IO_29, IO_30, IO_31, IO_32);
кінець
Else If ((~ напрямку [3]) & & (~ WE_N) & & (~ ALE))
починати
disc2532 <= D;
кінець
кінець
add5: початок
якщо (у напрямку [4])
починати
data2proc <= (IO_33, IO_34, IO_35, IO_36, IO_37, IO_38, IO_39, IO_40);
кінець
Else If ((~ напрямку [4]) & & (~ WE_N) & & (~ ALE))
починати
disc3340 <= D;
кінець
кінець
add6: початок
якщо (у напрямку [5])
починати
data2proc <= (IO_41, IO_42, IO_43, IO_44, IO_45, IO_46, IO_47, IO_48);
кінець
Else If ((~ напрямку [5]) & & (~ WE_N) & & (~ ALE))
починати
disc4148 <= D;
кінець
кінець
add7: початок
якщо (у напрямку [6])
починати
data2proc <= (IO_49, IO_50, IO_51, IO_52, IO_53, IO_54, IO_55, IO_56);
кінець
Else If ((~ напрямку [6]) & & (~ WE_N) & & (~ ALE))
починати
disc4956 <= D;
кінець
кінець
add8: початок
якщо (у напрямку [7])
починати
data2proc <= (IO_57, IO_58, IO_59, IO_60, IO_61, IO_62, IO_63, IO_64);
кінець
Else If ((~ напрямку [7]) & & (~ WE_N) & & (~ ALE))
починати
disc5764 <= D;
кінець
кінець
ENDCASE
кінець

/ / Присвоєння першого discIO Банк
призначити IO_1 = disc18 [0]
призначити IO_2 = disc18 [1];
призначити IO_3 = disc18 [2];
призначити IO_4 = disc18 [3];
призначити IO_5 = disc18 [4];
призначити IO_6 = disc18 [5];
призначити IO_7 = disc18 [6];
призначити IO_8 = disc18 [7];

/ / Присвоєння банку IO 2 диска
призначити IO_9 = disc916 [0];
призначити IO_10 = disc916 [1];
призначити IO_11 = disc916 [2];
призначити IO_12 = disc916 [3];
призначити IO_13 = disc916 [4];
призначити IO_14 = disc916 [5];
призначити IO_15 = disc916 [6];
призначити IO_16 = disc916 [7];

/ / Присвоєння банку 3 IO
призначити IO_17 = disc1724 [0];
призначити IO_18 = disc1724 [1];
призначити IO_19 = disc1724 [2];
призначити IO_20 = disc1724 [3];
призначити IO_21 = disc1724 [4];
призначити IO_22 = disc1724 [5];
призначити IO_23 = disc1724 [6];
призначити IO_24 = disc1724 [7];

/ / Присвоєння 4 Банк IO
призначити IO_25 = disc2532 [0];
призначити IO_26 = disc2532 [1];
призначити IO_27 = disc2532 [2];
призначити IO_28 = disc2532 [3];
призначити IO_29 = disc2532 [4];
призначити IO_30 = disc2532 [5];
призначити IO_31 = disc2532 [6];
призначити IO_32 = disc2532 [7];

/ / Присвоєння банку 5 IO
призначити IO_33 = disc3340 [0];
призначити IO_34 = disc3340 [1];
призначити IO_35 = disc3340 [2];
призначити IO_36 = disc3340 [3];
призначити IO_37 = disc3340 [4];
призначити IO_38 = disc3340 [5];
призначити IO_39 = disc3340 [6];
призначити IO_40 = disc3340 [7];

/ / Присвоєння банку 5 IO
призначити IO_41 = disc4148 [0];
призначити IO_42 = disc4148 [1];
призначити IO_43 = disc4148 [2];
призначити IO_44 = disc4148 [3];
призначити IO_45 = disc4148 [4];
призначити IO_46 = disc4148 [5];
призначити IO_47 = disc4148 [6];
призначити IO_48 = disc4148 [7];

/ / Присвоєння банку 6 IO
призначити IO_49 = disc4956 [0];
призначити IO_50 = disc4956 [1];
призначити IO_51 = disc4956 [2];
призначити IO_52 = disc4956 [3];
призначити IO_53 = disc4956 [4];
призначити IO_54 = disc4956 [5];
призначити IO_55 = disc4956 [6];
призначити IO_56 = disc4956 [7];

/ / Присвоєння банку 7 IO
призначити IO_57 = disc5764 [0];
призначити IO_58 = disc5764 [1];
призначити IO_59 = disc5764 [2];
призначити IO_60 = disc5764 [3];
призначити IO_61 = disc5764 [4];
призначити IO_62 = disc5764 [5];
призначити IO_63 = disc5764 [6];
призначити IO_64 = disc5764 [7];
ENDMODULE

 
Я б рекомендував U використовувати умовні заяви присвоїти значення двонаправлених ліній введення-виведення
наприклад, для привласнити IO_1 = дозволити?disc18: 1'bz;
де це дозволять встановити високий, коли напрямок є виробництво і є дозволити читати
Проблема ур призначити заявою постійно водіння ліній введення-виведення
Ось чому ур мають шини
сподіваюся, що це допомагає

 
Ось corected коду ....Код:

Модуль test_io (IO_1, IO_2, IO_3, IO_4, IO_5, IO_6, IO_7, IO_8, IO_9, IO_10,

IO_11, IO_12, IO_13, IO_14, IO_15, IO_16, IO_17, IO_18, IO_19, IO_20,

IO_21, IO_22, IO_23, IO_24, IO_25, IO_26, IO_27, IO_28, IO_29, IO_30,

IO_31, IO_32, IO_33, IO_34, IO_35, IO_36, IO_37, IO_38, IO_39, IO_40,

IO_41, IO_42, IO_43, IO_44, IO_45, IO_46, IO_47, IO_48, IO_49, IO_50,

IO_51, IO_52, IO_53, IO_54, IO_55, IO_56, IO_57, IO_58, IO_59, IO_60,

IO_61, IO_62, IO_63, IO_64, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9,

A10, A11, A12, A13, A14, A15, D, pclk, Reset, WE_N, RD_N, ALE, hw0, HW1, HW2, HW3);INOUT IO_1, IO_2, IO_3, IO_4, IO_5, IO_6, IO_7, IO_8, IO_9, IO_10;

INOUT IO_11, IO_12, IO_13, IO_14, IO_15, IO_16, IO_17, IO_18, IO_19, IO_20;

INOUT IO_21, IO_22, IO_23, IO_24, IO_25, IO_26, IO_27, IO_28, IO_29, IO_30;

INOUT IO_31, IO_32, IO_33, IO_34, IO_35, IO_36, IO_37, IO_38, IO_39, IO_40;

INOUT IO_41, IO_42, IO_43, IO_44, IO_45, IO_46, IO_47, IO_48, IO_49, IO_50;

INOUT IO_51, IO_52, IO_53, IO_54, IO_55, IO_56, IO_57, IO_58, IO_59, IO_60;

INOUT IO_61, IO_62, IO_63, IO_64;/ / Мікропроцесорні автобус

введення A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15;

введення pclk;

введення RESET;

введення WE_N, RD_N, ALE;

введення hw0, HW1, HW2, HW3;

Брати Карамазови [0:7] D;/ / Внутрішні визначення

REG [0:7] data2proc;

/ / Reg [0:7] datafromproc;

дроту [15:0] адресу;REG [0:7] disc18;

REG [0:7] disc916;

REG [0:7] disc1724;

REG [0:7] disc2532;

REG [0:7] disc3340;

REG [0:7] disc4148;

REG [0:7] disc4956;

REG [0:7] disc5764;REG [0:7] напрямку;

дріт [3:0] HW;Параметр [15:0] add1 = 16'hc010,

ADD2 = 16'hc011,

add3 = 16'hc012,

add4 = 16'hc013,

add5 = 16'hc014,

add6 = 16'hc015,

add7 = 16'hc016,

add8 = 16'hc017;параметр [3:0] INVALID1 = 4'h0,

CD = 4'h1,

NAV = 4'h2,

INVALID2 = 4'hf;присвоїти адресу = (~ ALE)?
(A15, A14, A13, A12, A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, A0): 16'hz;

призначити HW = (HW3, HW2, HW1, hw0);/ *

Завжди @ (WE_N або ALE або D або адреса)

починати

випадок (адреса)

Dir: початок

якщо ((~ WE_N) & & (~ ALE))

починати

Direction = D;

кінець

кінець

ENDCASE

кінець * /Завжди @ (HW)

починати

випадок (HW)

INVALID1: початок

Direction = 8'hff;

кінець

CD: початок

Direction = 8'b00000000;

кінець

ВЧА: початок

Direction = 8'b11000000;

кінець

INVALID2: початок

Direction = 8'h00;

кінець

ENDCASE

кінецьпризначити D = ((~ RD_N) & & (~ ALE))?
data2proc: 8'bz;Завжди @ (адреса або напрям або WE_N або ALE або D або

IO_1 або IO_2 або IO_3 або IO_4 або IO_5 або IO_6 або IO_7 або IO_8 або

IO_9 або IO_10 або IO_11 або IO_12 або IO_13 або IO_14 або IO_15 або IO_16 або

IO_17 або IO_18 або IO_19 або IO_20 або IO_21 або IO_22 або IO_23 або IO_24 або IO_25 або IO_26 або

IO_27 або IO_28 або IO_29 або IO_30 або IO_31 або IO_32 або IO_33 або IO_34 або IO_35 або IO_36 або

IO_37 або IO_38 або IO_39 або IO_40 або IO_41 або IO_42 або IO_43 або IO_44 або IO_45 або IO_46 або

IO_47 або IO_48 або IO_49 або IO_50 або IO_51 або IO_52 або IO_53 або IO_54 або IO_55 або IO_56 або

IO_57 або IO_58 або IO_59 або IO_60 або IO_61 або IO_62 або IO_63 або IO_64)

починати

disc18 = 8'bzzzzzzzz;

disc916 = 8'bzzzzzzzz;

disc1724 = 8'bzzzzzzzz;

disc2532 = 8'bzzzzzzzz;

disc3340 = 8'bzzzzzzzz;

disc4148 = 8'bzzzzzzzz;

disc4956 = 8'bzzzzzzzz;

disc5764 = 8'bzzzzzzzz;випадок (адреса)

add1: початок

якщо (у напрямку [0])

починати

data2proc = (IO_1, IO_2, IO_3, IO_4, IO_5, IO_6, IO_7, IO_8);

кінець

Else If ((~ напрямку [0]) & & (~ WE_N) & & (~ ALE))

починати

disc18 = D;

кінець

кінець

ADD2: початок

якщо (у напрямку [1])

починати

data2proc = (IO_9, IO_10, IO_11, IO_12, IO_13, IO_14, IO_15, IO_16);

кінець

Else If ((~ напрямку [1]) & & (~ WE_N) & & (~ ALE))

починати

disc916 = D;

кінець

кінець

add3: початок

якщо (у напрямку [2])

починати

data2proc = (IO_17, IO_18, IO_19, IO_20, IO_21, IO_22, IO_23, IO_24);

кінець

Else If ((~ напрямку [2]) & & (~ WE_N) & & (~ ALE))

починати

disc1724 = D;

кінець

кінець

add4: початок

якщо (у напрямку [3])

починати

data2proc = (IO_25, IO_26, IO_27, IO_28, IO_29, IO_30, IO_31, IO_32);

кінець

Else If ((~ напрямку [3]) & & (~ WE_N) & & (~ ALE))

починати

disc2532 = D;

кінець

кінець

add5: початок

якщо (у напрямку [4])

починати

data2proc = (IO_33, IO_34, IO_35, IO_36, IO_37, IO_38, IO_39, IO_40);

кінець

Else If ((~ напрямку [4]) & & (~ WE_N) & & (~ ALE))

починати

disc3340 = D;

кінець

кінець

add6: початок

якщо (у напрямку [5])

починати

data2proc = (IO_41, IO_42, IO_43, IO_44, IO_45, IO_46, IO_47, IO_48);

кінець

Else If ((~ напрямку [5]) & & (~ WE_N) & & (~ ALE))

починати

disc4148 = D;

кінець

кінець

add7: початок

якщо (у напрямку [6])

починати

data2proc = (IO_49, IO_50, IO_51, IO_52, IO_53, IO_54, IO_55, IO_56);

кінець

Else If ((~ напрямку [6]) & & (~ WE_N) & & (~ ALE))

починати

disc4956 = D;

кінець

кінець

add8: початок

якщо (у напрямку [7])

починати

data2proc = (IO_57, IO_58, IO_59, IO_60, IO_61, IO_62, IO_63, IO_64);

кінець

Else If ((~ напрямку [7]) & & (~ WE_N) & & (~ ALE))

починати

disc5764 = D;

кінець

кінець

ENDCASE

кінець/ / Присвоєння першого discIO Банк

призначити IO_1 = disc18 [0]

призначити IO_2 = disc18 [1];

призначити IO_3 = disc18 [2];

призначити IO_4 = disc18 [3];

призначити IO_5 = disc18 [4];

призначити IO_6 = disc18 [5];

призначити IO_7 = disc18 [6];

призначити IO_8 = disc18 [7];/ / Присвоєння банку IO 2 диска

призначити IO_9 = disc916 [0];

призначити IO_10 = disc916 [1];

призначити IO_11 = disc916 [2];

призначити IO_12 = disc916 [3];

призначити IO_13 = disc916 [4];

призначити IO_14 = disc916 [5];

призначити IO_15 = disc916 [6];

призначити IO_16 = disc916 [7];/ / Присвоєння банку 3 IO

призначити IO_17 = disc1724 [0];

призначити IO_18 = disc1724 [1];

призначити IO_19 = disc1724 [2];

призначити IO_20 = disc1724 [3];

призначити IO_21 = disc1724 [4];

призначити IO_22 = disc1724 [5];

призначити IO_23 = disc1724 [6];

призначити IO_24 = disc1724 [7];/ / Присвоєння 4 Банк IO

призначити IO_25 = disc2532 [0];

призначити IO_26 = disc2532 [1];

призначити IO_27 = disc2532 [2];

призначити IO_28 = disc2532 [3];

призначити IO_29 = disc2532 [4];

призначити IO_30 = disc2532 [5];

призначити IO_31 = disc2532 [6];

призначити IO_32 = disc2532 [7];/ / Присвоєння банку 5 IO

призначити IO_33 = disc3340 [0];

призначити IO_34 = disc3340 [1];

призначити IO_35 = disc3340 [2];

призначити IO_36 = disc3340 [3];

призначити IO_37 = disc3340 [4];

призначити IO_38 = disc3340 [5];

призначити IO_39 = disc3340 [6];

призначити IO_40 = disc3340 [7];/ / Присвоєння банку 5 IO

призначити IO_41 = disc4148 [0];

призначити IO_42 = disc4148 [1];

призначити IO_43 = disc4148 [2];

призначити IO_44 = disc4148 [3];

призначити IO_45 = disc4148 [4];

призначити IO_46 = disc4148 [5];

призначити IO_47 = disc4148 [6];

призначити IO_48 = disc4148 [7];/ / Присвоєння банку 6 IO

призначити IO_49 = disc4956 [0];

призначити IO_50 = disc4956 [1];

призначити IO_51 = disc4956 [2];

призначити IO_52 = disc4956 [3];

призначити IO_53 = disc4956 [4];

призначити IO_54 = disc4956 [5];

призначити IO_55 = disc4956 [6];

призначити IO_56 = disc4956 [7];/ / Присвоєння банку 7 IO

призначити IO_57 = disc5764 [0];

призначити IO_58 = disc5764 [1];

призначити IO_59 = disc5764 [2];

призначити IO_60 = disc5764 [3];

призначити IO_61 = disc5764 [4];

призначити IO_62 = disc5764 [5];

призначити IO_63 = disc5764 [6];

призначити IO_64 = disc5764 [7];

ENDMODULE
 

Welcome to EDABoard.com

Sponsor

Back
Top