我对创建 verilog 模块的世界还很陌生,我必须创建一个 4to1 多路复用器、脉冲发生器、向上/向下计数器和一个 hex-to-7segment 显示器。这些后来都被放入顶层模块中。
我尝试创建 7 段和脉冲发生器,但我需要帮助创建 4to1 多路复用器(我之前只创建了 2to1 多路复用器)和向上/向下计数器。
这是我的实验论文上的描述。
脉冲发生器:用于控制计数器递增或递减的时间。它使用名为 DELAU 的输入来确定每个脉冲输出之间的时间长度。每个时钟滴答都会被计算在内。当计数时钟滴答数等于延迟输入时,会生成一个脉冲。
向上/向下计数器:每次接收到脉冲时,将递增或递减一个 8 位寄存器。当来自 xilinx 板的外部开关为高电平 (1) 时,计数器将递增。开关为低(0),它将减少寄存器。寄存器计数数据输出到顶层用于 LED 和 7 段显示。
4to1 多路复用器:为脉冲发生器提供延迟输入。mux 的四个输入将在顶层进行硬编码,以分别提供 0.5、1、1.5 和 2 秒延迟的延迟长度。2bit 选择将来自 xilinx 板上的 2 个开关。从板上,用户将能够切换选择计数器将向上或向下计数的延迟时间。
所以这是我到目前为止所拥有的。我真的没有太多的多路复用器和倒数计数器。(你也可以检查一下我的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
7段显示
`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;
always@(*)
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