我每次尝试编译时都会遇到错误,我不确定原因。有人可以帮忙吗?我是verilog的新手。
module D_FF(Clk, D, Reset_n, Q);
input D, Clk, Reset_n;
output Q;
reg Q;
lab4_GDL f1(.Clk(~Clk), .D(D), .Q(Qm));
lab4_GDL f2(.Clk(Clk), .D(Qm), .Q(Q));
always @(posedge Clk, negedge Reset_n)
begin
if (Reset_n == 0)
Q <= 0;
else
Q <= D;
end
endmodule
编辑:这就是问题要求我们做的事情:
在本部分中,您将在AlteraDE2板上实现存储器/寄存器电路。该电路具有以下规格:
DE2板上的开关SW15-0的当前值应始终以十六进制显示在四个七段显示器HEX3-0上。这部分电路将是组合逻辑。
使用KEY0作为低电平有效的异步复位,KEY1作为时钟输入,您应该能够将值存储在SW15-0的16位寄存器中。寄存器应该是一个16位的正边沿触发寄存器,它使用Altera FPGA中的嵌入式D触发器。 您可以实例化D触发器或为您的寄存器编写行为Verilog模型。该寄存器的内容应始终显示在四个七段显示器HEX7-4上。
编写提供必要功能的Verilog文件。使用KEY0作为低电平有效的异步复位,并使用KEY1作为时钟输入。您应该可以重复使用上一个实验中的hex-to-7段显示模块。按下复位时,HEX7-4将显示所有零。
这也是它所指的最后一个实验室:
module updown (SW, KEY, LEDR, LEDG, GPIO_0, HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7);
parameter n=32; // number of bits in updown counter
input [0:0] SW; // Updown switch 1=up, 0=down
input [0:0] KEY; // KEY[1] = Clock, KEY[0] = Reset_n
input [0:0] GPIO_0;
output [0:6] HEX0, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7;
output [n-1:0] LEDR; // Display binary count (active high) on Red LEDs
output [1:0] LEDG; // Display Clock on LEDG[1], Reset_n on LEDG[0]
wire Clock, Reset_n, Updown;
reg [n-1:0] Count;
assign Clock = GPIO_0[0];
assign Reset_n = KEY[0];
assign Updown = SW[0];
assign LEDR = Count;
assign LEDG[1:0] = {Clock, Reset_n};
always @(posedge Clk, negedge Reset_n) //clock = Clk
if (Reset_n == 0) // active-low asynchronous reset
Q <= 0;
else
Q <= D;
我的lab4_GDL如下:
// A gated RS latch
module lab4_GDL(Clk, D, Q);
input Clk, D;
output Q;
wire R_g, S_g, Qa, Qb /* synthesis keep */;
assign R = ~D;
assign R_g = ~(R & Clk);
assign S_g = ~(D & Clk);
assign Qb = ~(R_g & Qa);
assign Qa = ~(S_g & Qb);
assign Q = Qa;
endmodule
答案 0 :(得分:2)
在没有看到lab4_GDL
的代码的情况下,我的猜测是Q
模块的lab4_GDL
端口是输出端口。您不应将输出连接到上层模块中的reg
。
答案 1 :(得分:0)
lab4_GDL
输出端口Q
必须连接到wire
,但决不能连接到reg
类型。
此后,如果要将其输出值存储在某个寄存器中,则必须在时钟控制{{}内从连接的reg
到Q
归因于目的地wire
1}}块。