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
У мене є своєрідні проблеми.Ніколи не бачив цю 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