Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

апкс 2011 08_verilog_макросы

801 views

Published on

Published in: Education
  • Be the first to comment

апкс 2011 08_verilog_макросы

  1. 1. 8. Синтезируемые Verilog- модели цифровых устройств Автоматизация проектирования компьютерных систем Хаханова И.В, каф.АПВТ, ХНУРЭ e-13.03.2011 mail: hahanova@mail.ru 1
  2. 2. Цель лекции и содержание Цель – изучить принципы построения синтезируемых моделей цифровых устройств на Verilog План  Модели комбинационных устройств  Арифметические устройства 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 2 e-mail: hahanova@mail.ru
  3. 3. Комбинационные элементы 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 3 e-mail: hahanova@mail.ru
  4. 4. Мультиплексор 4 в 1 с использованием IFmodule mux (input a,b,c,d, input [1:0] s, output reg o);always @(a, b, c, d, s) [0] begin [1] if (s == 2b00) o = a; o6 else if (s == 2b01) oa= b; else if (s == 2b10) o = c; e d else o = d; [0] [1] e end o7 d o eendmodule c d b e d d o [1] [1] [1:0] [0] s[1:0] o8 un1_s_1 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 4 e-mail: hahanova@mail.ru
  5. 5. Мультиплексор 4 в 1 с использованием CASEmodule mux (input a,b,c,d, input [1:0] s, output reg o); [0] [1]always @(a, b, c, d, s) o6 begin a case (s) e 2b00 : o = a; [0] d [1] e 2b01 : o = b; d o o7 e 2b10 : o = c; d c default : o = d; b e d d endcase [1] o [1:0] [0] s[1:0] [1]end o8 un1_o8endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 5 e-mail: hahanova@mail.ru
  6. 6. Мультиплексор на тристабильных буферах [3:0] [3] s[3:0]module mux a o (input a,b,c,d, un3_o input [3:0] s, [2] output o); b un8_o assign o = s[3] ? a :1bz; [1] assign o = s[2] ? b :1bz; c un13_o assign o = s[1] ? c :1bz; assign o = s[0] ? d :1bz; [0] dendmodule un18_o 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 6 e-mail: hahanova@mail.ru
  7. 7. Дешифратор (One-Hot) res[7:0]module mux (input [2:0] sel, output reg [7:0] res); [1] [2] [2:0] [0] sel[2:0]always @(sel, res) res40 case (sel) [0] [2] [1] 3b000 : res = 8b00000001; res39 [2] un1_res40 un1_res40_1 3b001 : res = 8b00000010; [2] [0] 3b010 : res = 8b00000100; [0] [1] [1] [2] res38 res37 3b011 : res = 8b00001000; 3b100 : res = 8b00010000; [1] [0] [2] res36 3b101 : res = 8b00100000; 3b110 : res = 8b01000000; [0] [1] [2] default : res = 8b10000000; res35 endcase [0] [1] [2]endmodule res34 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 7 e-mail: hahanova@mail.ru
  8. 8. Дешифратор ONE-COLD res[7:0]module dec (sel, res); [1] [2] [2:0] [0] sel[2:0]input [2:0] sel; output [7:0] res; [2] res40 un1_res40_1reg [7:0] res; [0] [2] [1]always @(sel) res39 un1_res40 case (sel) [2] [0] [1] res38 un1_res39 3b000 : res = 8b11111110; 3b001 : res = 8b11111101; un1_res38 3b010 : res = 8b11111011; [0] 3b011 : res = 8b11110111; [1] [2] un1_res37 res37 3b100 : res = 8b11101111; [1] 3b101 : res = 8b11011111; [0] [2] un1_res36 res36 3b110 : res = 8b10111111; [0] default : res = 8b01111111; [1] [2] res35 un1_res35 endcase [0]endmodule [1] [2] res34 un1_res34 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 8 e-mail: hahanova@mail.ru
  9. 9. Дешифратор на операторе case 00 res[7:0]module mux (sel, res); [0] (input [2:0] sel, [2:0] [2] [1] sel[2:0] output reg [7:0] res); res35always @(sel, res) [2] case (sel) [0] [1] res34 3b000 : res = 8b00000001; 3b001 : res = 8b00000010; [0] [1] 3b010 : res = 8b00000100; [2] res33 3b011 : res = 8b00001000; 3b100 : res = 8b00010000; [1] [0] [2] 3b101 : res = 8b00100000; res32 // 110 and 111 selector values are unused [0] default : res = 8bxxxxxxxx; [1] [2]endcase res31endmodule [0] [1] [2] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ res30 9 e-mail: hahanova@mail.ru
  10. 10. Устройства сдвигаXilinx проектирует логические схемы сдвига как комбинационную схему с двумя входами и 1 выходом  Первый вход - сдвигаемые данные  Второй вход - определяет число разрядов, на которые выполняется сдвигНа выход поступает результат операции сдвига.Следует использовать один тип операции сдвига.Значение n для операции сдвига должно увеличиваться или уменьшаться только на 1 для каждого последующего двоичного значения селектора.Значение n может быть только положительнымВсе значения селектора должны присутствовать 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 10 e-mail: hahanova@mail.ru
  11. 11. Комбинационное устройство сдвига 1module lshift (input [7:0] DI, input [1:0] SEL, output reg [7:0] SO);always @(DI, SEL) case (SEL) 2b00 : SO <= DI; 2b01 : SO <= DI << 1; 2b10 : SO <= DI << 2; default : SO <= DI << 3; endcaseendmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 11 e-mail: hahanova@mail.ru
  12. 12. Комбинационное устройство сдвига 2 [0] [1] SO21 e [7:0] d [0] [1] e [6:0] d [7:0] [7:0] =0 SO[7:0] SO22 e [7:0] [5:0] d DI[7:0] =00 e d [4:0] =000 [1] SO[7:0] [1:0] [0]SEL[1:0] [1] SO23 un1_SO23 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 12 e-mail: hahanova@mail.ru
  13. 13. Арифметические устройства Сумматоры:  С переносом из младшего разряда  С переносом в старший разряд  С переносом из младшего и в старший разряд Устройство вычитания Сумматор/вычитатель Компаратор (=, /=,<, <=, >, >=) Устройство умножения Устройство деленияСложение, вычитание, сравнение и умножение разрешено для знаковых и беззнаковых чисел 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 13 e-mail: hahanova@mail.ru
  14. 14. Сумматор (беззнаковый) 1 Без переноса С переносом из мл. раз. module adder module adder (input [7:0] A, B, input CI, (input [7:0] A, B, output [7:0] SUM); output [7:0] SUM); assign SUM = A + B + CI; assign SUM = A + B; endmodule endmodule [7:0] [7:0] [7:0] [7:0] A[7:0]A[7:0] [7:0] [7:0] + [7:0] [7:0] SUM[7:0] B[7:0] [7:0] [7:0] + [7:0] [7:0] SUM[7:0]B[7:0] SUM_1[7:0] CI SUM_1[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 14 e-mail: hahanova@mail.ru
  15. 15. Сумматор (беззнаковый) 2с переносом в ст. разр.module adder (input [7:0] A, B, output [7:0] SUM, output CO); wire [8:0] tmp; assign tmp = A + B; assign SUM = tmp [7:0]; assign CO = tmp [8];endmodule [7:0] [7:0] A[7:0] [7:0] [7:0] + [8:0] [7:0] [7:0] [7:0] SUM[7:0] B[7:0] tmp[8:0] SUM[7:0] [8] CO 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 15 e-mail: hahanova@mail.ru
  16. 16. Сумматор (беззнаковый) 3module adder (input CI, input [7:0] A, B, output [7:0] SUM, output CO); wire [8:0] tmp; assign tmp = A + B + CI; assign SUM = tmp [7:0]; assign CO = tmp [8];endmodule [7:0] [7:0] A[7:0] B[7:0] [7:0] [7:0] + [8:0] [7:0] [7:0] [7:0] SUM[7:0] CI SUM[7:0] tmp[8:0] [8] CO 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 16 e-mail: hahanova@mail.ru
  17. 17. Сумматор (знаковый)(XST)Для прог. синтеза XSTmodule adder (input signed [7:0] A, B, output signed [7:0] SUM); assign SUM = A + B;endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 17 e-mail: hahanova@mail.ru
  18. 18. Устройство вычитанияmodule subtr (input [7:0] A, B, output [7:0] RES); assign RES = A - B;endmodule [7:0] [7:0] A[7:0] B[7:0] [7:0] [7:0] + [7:0] [7:0] RES[7:0] 1 RES_1[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 18 e-mail: hahanova@mail.ru
  19. 19. Компараторmodule compar (input [7:0] A, B, output CMP); assign CMP = A >= B ? 1b1 : 1b0;endmodule [7:0] [7:0] A[7:0] [7:0] [7:0] < CMP B[7:0] un1_CMP CMP 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 19 e-mail: hahanova@mail.ru
  20. 20. Беззнаковый умножитель module mult(A, B, RES); input [7:0] A; input [3:0] B; output [11:0] RES; assign RES = A * B; endmodule [7:0] [7:0]A[7:0] [3:0] [3:0] * [11:0][11:0] RES[11:0]B[3:0] RES[11:0] Использует 32 блока LUT 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 20 e-mail: hahanova@mail.ru
  21. 21. Устройство деления Поддерживается деление на константу степени 2 module divider(DI, DO); input [7:0] DI; output [7:0] DO; assign DO = DI / 2; endmodule =0 DO[7:0] [7:0] [7:1] DI[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 21 e-mail: hahanova@mail.ru
  22. 22. Совместное использование ресурсов (Resource Sharing) Цель уменьшить размер схемы основываясь на принципе, что два подобных арифметических ресурса могут быть реализованы на одной схеме, если она никогда не используется ими одновременно XST поддерживает совместное использование ресурсов для сумматоров, вычитателей, сумматоров/вычитателей и умножителей. 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 22 e-mail: hahanova@mail.ru
  23. 23. Совместное использование ресурсовmodule addsub (input OPER, input [7:0] A, B, C, output reg [7:0] RES);always @(A, B, C, OPER) if (OPER==1b0) RES = A + B; else RES = A - C;endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 23 e-mail: hahanova@mail.ru
  24. 24. Результат синтеза [7:0] A[7:0]Совместное OPER [7:0]использование [7:0] [7:0] B[7:0] 0ресурсов [7:0] [7:0] + [7:0] [7:0] RES[7:0] [7:0] [7:0] C[7:0] 1 un1_B[7:0] RES[7:0] [7:0] A[7:0] [7:0] [7:0] [7:0] + [7:0] [7:0] B[7:0] 0 [7:0] [7:0] RES_1[7:0] RES[7:0] [7:0] 1 OPER RES[7:0] [7:0] Без совместного использования C[7:0] [7:0] [7:0] + [7:0] ресурсов 1 un4_RES[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 24 e-mail: hahanova@mail.ru
  25. 25. Последовательностная логика 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 25 e-mail: hahanova@mail.ru
  26. 26. Триггеры 1module flop Задний фронт синхронизации и асинхронный сброс (input C, D, module flop (input C, D, CLR, output reg Q); output reg Q);always @(posedge C) always @(negedge C, posedge CLR) Q = D; if (CLR) Q = 1’b0; else Q = D;endmodule endmodule CC D D Q QD D Q Q R Q CLR Q 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 26 e-mail: hahanova@mail.ru
  27. 27. Триггеры 2 Передний фронт Передний фронт синхронизации и синхронная синхронизации и сигнал установка в 1 разрешения синхронизацииmodule flop CE (input C, D, S, module flop output reg Q); (input C, D, CE,always @(posedge C) output reg Q); if (S) Q = 1’b1; always @(posedge C) else Q = D; if (CE) Q = D;endmodule endmoduleCD D Q Q CS S D D Q Q CE E Q Q 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 27 e-mail: hahanova@mail.ru
  28. 28. Триггеры-защелкиmodule latch module latch (input G, D, (input G, D, CLR, output reg Q); output reg Q); always @(G, D, CLR)always @(G, D) if (CLR) if (G) Q = D; Q = 1b0;endmodule else if (G) Q = D; lat endmodule latrD D Q Q D DG C G C Q Q Q CLR R Q 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 28 e-mail: hahanova@mail.ru
  29. 29. Счетчики: 4-битовый беззнаковый с асинхронным сбросомmodule counter (input C, CLR, output reg [3:0] Q); always @(posedge C, posedge CLR) if (CLR) Q = 4b0000; else Q = Q + 1b1;endmodule C [3:0] 1 + [3:0] [3:0] D[3:0] Q[3:0] [3:0] [3:0] Q[3:0] R un3_Q[3:0] CLR Q[3:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 29 e-mail: hahanova@mail.ru
  30. 30. Счетчики: 4-битовый беззнаковыйвычитающий с синхр. установкойmodule counter (input C, S, output reg [3:0] Q);always @(posedge C) if (S) Q = 4b1111; else tmp = Q - 1b1;endmodule C [3:0] [3:0] [3:0] 1111 + [3:0] [3:0] D[3:0] Q[3:0] [3:0] [3:0] Q[3:0] un1_Q[3:0] S Q_5[3:0] Q[3:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 30 e-mail: hahanova@mail.ru
  31. 31. Счетчики: 4-битовый беззнаковый с параллельной загрузкойmodule counter (input C, ALOAD, input [3:0] D, output reg [3:0] Q);always @(posedge C) if (ALOAD) Q = D; else Q = Q + 1b1;endmodule ALOAD [3:0] 1 + [3:0] [3:0] 0 [3:0] [3:0] [3:0] [3:0] D[3:0] Q[3:0] Q[3:0] [3:0] un1_Q[3:0] 1 [3:0] Q[3:0] D[3:0] Q_5[3:0] C 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 31 e-mail: hahanova@mail.ru
  32. 32. Аккумулятор с асинхронным сбросомmodule accum (input C, CLR, input [3:0] D, output reg [3:0] Q);always @(posedge C, posedge CLR) if (CLR) Q = 4b0000; else Q = Q + D;endmodule C [3:0] [3:0] D[3:0] [3:0] + [3:0] [3:0] D[3:0] Q[3:0] [3:0] [3:0] Q[3:0] R un3_Q[3:0] CLR Q[3:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 32 e-mail: hahanova@mail.ru
  33. 33. 8-битовый сдвиговый регистр споследовательными входом и выходами module shift (input C,SI, output SO); reg [7:0] tmp; always @(posedge C) begin tmp = tmp << 1; tmp[0] = SI; end assign SO = tmp[7]; C endmodule [6:0] [7:0] [7] D[7:0] Q[7:0] SO SI tmp[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 33 e-mail: hahanova@mail.ru
  34. 34. 8-битовый сдвиговый регистр с последовательнымивходом и выходами, с входом разрешенияmodule shift (input C,SI, CE, output SO); reg [7:0] tmp;always @(negedge C) if (CE) begin tmp = tmp << 1; tmp[0] = SI; C endassign SO = tmp[7]; [6:0] D[7:0] Q[7:0] [7] SO [7:0]endmodule SI E CE tmp[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 34 e-mail: hahanova@mail.ru
  35. 35. 8-битовый сдвиговый регистр со сбросомmodule shift (input C,SI,CLR, output SO); reg [7:0] tmp;always @(posedge C, posedge CLR) if (CLR) tmp = 8b00000000; elsetmp = {tmp[6:0], SI};assign SO = tmp[7]; Cendmodule [6:0] [7:0] [7] D[7:0] Q[7:0] SO SI R CLR tmp[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 35 e-mail: hahanova@mail.ru
  36. 36. Двунаправленный сдвиговый регистрmodule shift (input C,SI,LEFT_RIGHT, output [7:0] PO); reg [7:0] tmp;always @(posedge C) if (LEFT_RIGHT==1b0) tmp = {tmp[6:0], SI}; else tmp = {SI, tmp[7:1]};assign PO = tmp;endmodule C LEFT_RIGHT [6:0] 0 [7:0] [7:0] [7:0] [7:0] D[7:0] Q[7:0] PO[7:0] 1 SI PO[7:0] [7:1] tmp_5[7:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 36 e-mail: hahanova@mail.ru
  37. 37. Автоматы 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 37 e-mail: hahanova@mail.ru
  38. 38. Представление автомата Мили и Мура Reset Функция Регистр Функция Выходы переходов состояний выходовВходы Clock Только для автомата Мили 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 38 e-mail: hahanova@mail.ru
  39. 39. Пример описания автомата. Граф-схема автомата.data_in data_out 3 FSM state0 enable=0enable state1 clk state2 rst idle state0 = 1 enable=1 enable=1 data_out = data_in[0]state2 = 1data_out = data_in[2] enable=1 write read enable=0 enable=0 state1=1 data_out = data_in[1] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 39 e-mail: hahanova@mail.ru
  40. 40. Пример описания автоматаДвух-блоковая модель 1module FSM1_synplify (input clk, rst, enable, input [2:0] data_in, output data_out, state0, state1, state2);/* Определены метки состояний*/ parameter deflt=3bxxx; parameter idle=3b001; parameter read=3b010; parameter write=3b100; reg data_out, state0, state1, state2; reg [2:0] state, next_state;/* Блок Always для последовательностной логики*/always @(posedge clk, negedge rst) if (!rst) state <= idle; else state <= next_state; 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 40 e-mail: hahanova@mail.ru
  41. 41. Пример описания автомата Двух-блоковая модель 2/* Блок Always для комбинационной логики*/always @(state, enable, data_in) begin/* Значения по умолчанию для выходов автомата FSM*/ state0 <= 1b0; state1 <= 1b0; state2 <= 1b0; data_out <= 1b0; case (state) idle : if (enable) begin state0 <= 1b1; data_out <= data_in[0]; next_state <= read; end else next_state <= idle; read : if (enable) begin state1 <= 1b1; data_out <= data_in[1]; next_state <= write; end else next_state <= read; 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 41 e-mail: hahanova@mail.ru
  42. 42. Пример описания автоматаДвух-блоковая модель 3 write : if (enable) begin state2 <= 1b1; data_out <= data_in[2]; next_state <= idle; end else next_state <= write; /* Default assignment for simulation*/ default : next_state <= deflt; endcaseendendmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 42 e-mail: hahanova@mail.ru
  43. 43. Двух-блоковая модель Результат синтеза [0] state0 statemachine enable I state0 [2:0] clk C Q[2:0] rst R e [0] d e state[2:0] 0 d [1] data_out e [1] d state1 e [2] [2:0] ddata_in[2:0] data_out state1 [2] state2 state2 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 43 e-mail: hahanova@mail.ru
  44. 44. Окно FSM Viewer 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 44 e-mail: hahanova@mail.ru
  45. 45. Пример модели автоматас одним блоком 1 module fsm_1xst (input clk, reset, x1, output reg outp); reg [1:0] state; parameter s1 = 2b00; parameter s2 = 2b01; parameter s3 = 2b10; parameter s4 = 2b11; always @(posedge clk, posedge reset) begin if (reset) begin state = s1; outp = 1b1; end 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 45 e-mail: hahanova@mail.ru
  46. 46. Пример модели автомата с одним блоком 2else begin s3: begin state = s4; case (state) outp = 1b0; s1: begin end if (x1==1b1) state = s2; s4: begin state = s1; else state = s3; outp = 1b0; outp = 1b1; end end endcase s2: begin state = s4; end outp = 1b1; end end endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 46 e-mail: hahanova@mail.ru
  47. 47. Пример модели автомата Результаты синтезаМодель с одним блоком [0] e statemachine 0 d x1 I [1] [3:0] e S clk C Q[3:0] 0 dreset R D Q outp [2] e 1 d outp s4 [3] state[3:0] e 1 d un1_state[1]Модель с двумя блоками s2 s3 [0] e statemachine 0 d s1 x1 I [1] [3:0] e clk C Q[3:0] 0 d reset R outp [2] e 1 d un1_un1_state[1] state[3:0] [3] e 1 d un1_state[1] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 47 e-mail: hahanova@mail.ru
  48. 48. Модель памяти с асинхронным чтениемmodule raminfr (input clk, we, input [4:0] a, input [3:0] di, output [3:0] do); ram1 [4:0] reg [3:0] ram [31:0]; di[3:0] RADDR[4:0] [3:0] [3:0] DATA[3:0] [3:0] [3:0] [4:0] [4:0] DOUT[3:0] do[3:0] a[4:0] WADDR[4:0] we WE clk CLKalways @(posedge clk) ram[3:0] if (we) ram[a] <= di;assign do = ram[a];endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 48 e-mail: hahanova@mail.ru
  49. 49. Модель памяти с синхронным чтениемmodule raminfr (input clk, we, input [4:0] a, input [3:0] di, output [3:0] do); reg [3:0] ram [31:0]; reg [4:0] read_a;always @(posedge clk) begin if (we) ram[a] <= di; read_a <= a; endassign do = ram[read_a];endmodule 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 49 e-mail: hahanova@mail.ru
  50. 50. Модель двухпортовой памяти с асинхронным чтениемmodule raminfr (input clk, we, input [4:0] a, dpra, input [3:0] di, output [3:0] spo, dpo); ram1 reg [3:0] ram [31:0]; [4:0] [4:0] dpra[4:0] RADDR[4:0] [3:0] [3:0] di[3:0] DATA[3:0] [3:0] [3:0] [4:0] [4:0] DOUT[3:0] dpo[3:0] a[4:0] WADDR[4:0]always @(posedge clk) begin we clk WE CLK if (we) ram[3:0] ram[a] <= di; end ram1 [4:0] RADDR[4:0] [3:0] DATA[3:0] [3:0] [3:0]assign spo = ram[a]; [4:0] WADDR[4:0] WE DOUT[3:0] spo[3:0]assign dpo = ram[dpra]; CLKendmodule ram_1[3:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 50 e-mail: hahanova@mail.ru
  51. 51. Модель двухпортовой памяти ссинхронным чтениемmodule raminfr (input clk, we, input [4:0] a, dpra, input [3:0] di, output [3:0] spo, dpo); reg [3:0] ram [31:0]; reg [4:0] read_a, read_dpra;always @(posedge clk) begin ram1 clk if (we) dpra[4:0] [4:0] [4:0] D[4:0] Q[4:0] RADDR[4:0] DATA[3:0] [4:0] [4:0] [3:0] read_dpra[4:0] ram[a] <= di; di[3:0] [3:0] WADDR[4:0] WE DOUT[3:0] dpo[3:0] [4:0] [3:0] [3:0] read_a <= a; CLK read_dpra <= dpra; ram[3:0]end ram1assign spo = ram [read_a]; a[4:0] [4:0] [4:0] D[4:0] Q[4:0] [4:0] [4:0] [3:0] RADDR[4:0] DATA[3:0]assign dpo = ram [read_dpra]; read_a[4:0] [4:0] WADDR[4:0] DOUT[3:0] [3:0] [3:0] spo[3:0] we WEendmodule CLK ram_1[3:0] 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 51 e-mail: hahanova@mail.ru
  52. 52. Контрольные вопросы 13.03.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ 52 e-mail: hahanova@mail.ru

×