2015-04-15 11 views
-1

Я довольно новичок в мире создания модулей verilog, и мне нужно создать мультиплексор 4to1, генератор импульсов, счетчик вверх/вниз и hex- to-7segment display. Все они позже помещаются в модуль верхнего уровня.написать код модуля verilog для счетчика вверх/вниз, 4to1 mux, pulsegen

Я попытался создать генератор 7segement и импульсов, но мне нужна помощь в создании мультиплексора 4to1 (я только создал мульт 2to1 раньше) и счетчик вверх/вниз.

Это описание моей лабораторной бумаги.

pulse gen: используется для управления временем, в которое счетчик будет увеличивать или декремент. он использует вход с именем DELAU для определения длины времени между каждым импульсным выходом. подсчитывается каждый такт. когда # из подсчитывает тактовые импульсы, равные входу задержки, генерируется импульс.

счетчик вверх/вниз: будет увеличивать или уменьшать регистр 8 бит каждый импульс времени принимается. когда внешний переключатель с доски xilinx равен high (1), тогда счетчик будет увеличиваться. переключатель низкий (0) он будет декремент регистра. данные счетчика регистров выводятся на уровень для светодиодов и 7-сегментного дисплея.

4to1 mux: обеспечивает задержку ввода для генерации импульса. четыре входа для мультиплексирования будут жестко закодированы на верхнем уровне, чтобы обеспечить длину задержки 0,5, 1, 1,5 и . Задержка в 2 секунды соответственно. 2-битный выбор будет поступать от 2 переключателей на плате xilinx. с борта, пользователь сможет переключиться выберите время задержки, на которое счетчик будет считать вверх или вниз.

так вот что я до сих пор. у меня действительно не так много для мультиплексора и счетчика опроса. (Вы могли бы также, пожалуйста, проверьте мой PULSEGEN?)

4to1MUX

`timescale 1ns/1ps 
module mux4to1(sel,seg0,seg1,seg2,seg3,delay); 
    input [1:0] sel; 
    input seg0,seg1,seg2,seg3; 
    output delay; 
    wire delay; 
    assign seg0 = 500000000; 
    assign seg1 = 1000000000; 
    assign seg2 = 1500000000; 
    assign seg3 = 2000000000; 
endmodule 

ВВЕРХ/ВНИЗ СЧЕТЧИК

`timescale 1ns/1ps 
module updownCounter(updown,pulse,count); 
    input [7:0] updown, 
    input pulse; 
    output [7:0] count; 
    wire [7:0] count; 

    (i'm not sure what goes here) 
endmodule 

ГЕНЕРАТОР ИМПУЛЬСОВ

`timescale 1ns/1ps 
module pulsegen(clk,rst,delay,pulse); 
    input [28:0] delay; 
    output pulse; 
    wire pulse; 
    reg [28:0] count; 

    always @(posedge clk, posedge rst) 
     if (rst) 
      count <= 28'b0; 
     else if (pulse) 
      count <= 28'b0; 
     else 
      count <= count + 28'b1; 
    assign pulse = (count == delay); 
endmodule 

7SEGMENT DISPLAY

`timescale 1ns/1ps 
module sevenSegDis(hex,a,b,c,d,e,f,g); 
    input [3:0] hex; 
    output a,b,c,d,e,f,g; 
    reg a,b,c,d,e,f,g; 

    [email protected](*) 
     case(hex) 
      4'b0000: {a,b,c,d,e,f,g}= 7'b0000001; 
      4'b0001: {a,b,c,d,e,f,g}= 7'b1001111; 
      4'b0010: {a,b,c,d,e,f,g}= 7'b0010010; 
      4'b0011: {a,b,c,d,e,f,g}= 7'b0000110; 
      4'b0100: {a,b,c,d,e,f,g}= 7'b1001100; 
      4'b0101: {a,b,c,d,e,f,g}= 7'b0100100; 
      4'b0110: {a,b,c,d,e,f,g}= 7'b0100000; 
      4'b0111: {a,b,c,d,e,f,g}= 7'b0001111; 
      4'b1000: {a,b,c,d,e,f,g}= 7'b0000000; 
      4'b1001: {a,b,c,d,e,f,g}= 7'b0000100; 
      4'b1010: {a,b,c,d,e,f,g}= 7'b0001000; 
      4'b1011: {a,b,c,d,e,f,g}= 7'b1100000; 
      4'b1100: {a,b,c,d,e,f,g}= 7'b0110001; 
      4'b1101: {a,b,c,d,e,f,g}= 7'b1000010; 
      4'b1110: {a,b,c,d,e,f,g}= 7'b0110000; 
      4'b1111: {a,b,c,d,e,f,g}= 7'b0111000; 
      default: {a,b,c,d,e,f,g}= 7'b1110111; 
     endcase 
endmodule 

ответ

0

Я думаю, вы слегка неправильно поняли описание мультиплексора. Вам не нужно создавать импульсы внутри, поэтому номера 500000000, 1000000000, не должны появляться там.

Вместо этого мультиплексор не должен заботиться о том, что означают его входы. Он просто должен подключить один из них к выходу, в зависимости от значения входа выбора. Как и в декодере 7-сегментный, вы можете использовать case о модели мультиплексора и он может выглядеть следующим образом:

module mux4to1 (sel, seg0, seg1, seg2, seg3, delay); 
    input [1:0] sel; 
    input seg0, seg1, seg2, seg3; 
    output delay; 

    always @(*) 
    case(sel) 
    /* fill in the appropriate Verilog code which expresses this: 
     if `sel` is 0 -> `delay` is `seg0` 
     if `sel` is 1 -> `delay` is `seg1` 
     and so on */ 
    endcase 
endmodule 

Ваш вверх/вниз счетчик необходим дополнительный тактовый вход. Вход updown должен быть одним битом, а не восемью битами.

Код счетчика должен быть похож на код генератора импульсов. В каждом тактовом цикле, один из следующих должно произойти:

  • если pulse является 0, счетчик остается, как это
  • если pulse является 1 и updown является 1, то счетчик увеличивается на единицу
  • если pulse равно 1 и updown равно 0, то счетчик уменьшается на один

Ваш генератор импульсов и декодер 7-сегмент, как представляется, Хорошо.

 Смежные вопросы

  • Нет связанных вопросов^_^