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

716 views
667 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
716
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

апкс 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

×