Я довольно новичок в мире создания модулей 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