我是 Verilog HDL 的初学者,并尝试从逻辑图中对一些模块进行建模。如果两条线输入到与非门,然后再输入另一个反相器,理论上这只是一个与门吗?由于所需的输出线位于逆变器的另一侧。可不可能是。
AND
g1(F,A,B)
Run Code Online (Sandbox Code Playgroud)
A 和 B 是输入,F 是输出。另外,为了将来的知识,我将如何使用 Verilog 实现逆变器?
如果我不知道大小,我如何取消系统verilog中的寄存器?例如,如果我有:
reg [DATA_WIDTH-1:0] data_stack;
Run Code Online (Sandbox Code Playgroud)
DATA_WIDTH给模块一些参数.是否可以为寄存器分配零data_stack?
注意,初始化类似于reg零的就足够了,因为我可以简单地执行按位并在两者之间执行并使其无效data_stack.
此外,任何推荐的网站,我可以学习这些东西?谷歌搜索让我只有一些贫血的网站.
我有一行verilog代码,我上网了,我不明白这意味着什么.
rom_data <= #`DEL {rom[rom_addr+3],rom[rom_addr+2],rom[rom_addr+1],rom[rom_addr]};
Run Code Online (Sandbox Code Playgroud)
有人可以帮我揭穿这个吗?
我想在 gtkwave 上显示代码的波形,但是在 CMI 中输入这些语句后:
iverilog -o task_compiled task.v
vvp任务编译
=> VCD 信息:转储文件 main.vcd 打开用于输出
gtkwave任务.vcd
=> GTKwave 分析仪...
error opening .vcd file `task.vcd`
Run Code Online (Sandbox Code Playgroud)
如果这是一个愚蠢的问题,我提前道歉,但我真的厌倦了在这件事上浪费时间。我只想做作业
timescale 1ns/10ps
module main(A_i, B_i, C_i, Y_o);
input A_i, B_i, C_i;
output Y_o;
wire w1, w2, w3, w4;
assign Y_o = w4 ~& w2;
assign w1 = B_i & C_i;
assign w2 = w1 | w3;
assign w3 = w4 | A_i;
assign w4 = A_i ~| w1;
endmodule
module main_tb;
reg a1, b1, c1; …Run Code Online (Sandbox Code Playgroud) 我不熟悉verilog.我尽力尝试转换它.
虽然模拟时钟从'0'变为'x',这很奇怪.我怀疑这部分是问题所在
repeat(9) @(posedge clk);
DataIn_i <= 1'b1;
DataIn_q <= 1'b1;
@(posedge clk);
FillSel <= 1'b0;
DataIn_i <= 1'b0;
DataIn_q <= 1'b0;
Run Code Online (Sandbox Code Playgroud)
这里有两个长椅的链接.
Verilog工作台 - http://a.pomf.se/fvamqd.v Vhdl工作台 - http://a.pomf.se/riolvf.vhd
欢迎任何意见,提前谢谢.
编辑:任何人都可以解释上面给出的verilog代码?
教授给出了下面的代码,我要弄清楚为什么它永远不会停止。
module tb_problem1();
reg a, b, c, d, e;
wire x;
reg [4:0] ins;
problem1 dut(a, b, c, d, e, x);
initial begin
ins = 0;
while(ins < 32) begin
{a, b, c, d, e} = ins;
#20;
ins = ins + 1;
end
end
endmodule
Run Code Online (Sandbox Code Playgroud)
那是因为我们需要做ins = ins+1'b1;吗?
我这样写代码:
module alu(input[7:0] a,input[7:0] b,input [2:0] op,output reg [7:0] y);
always@(a or b or op) begin
case(op)
3'b000: y = a + b;
3'b001: y = a - b;
3'b010: y = a * b;
3'b011: y = a / b;
3'b100: y = a & b;
3'b101: y = a | b;
3'b110: y = ~a;
3'b111: y = a ^ b;
endcase
$display("base 10 : %dns :?op=%d b=%d y=%d" , $stime, op, a, b, y);
$display("base 2 : …Run Code Online (Sandbox Code Playgroud) 在verilog代码中仅给出1和给出1'b1有什么区别?
我正在学习 Verilog。我不明白电线和三网类型、魔杖和三网类型之间的区别。我们究竟需要在哪里将网络指定为魔杖和三和?
我的任务是用 verilog 编写一个 16 位 ALU。我在做需要旋转操作数和做2的补码加减法的部分时发现困难。我知道如何用纸和铅笔解决这个问题,但我无法想出在 Verilog 中的方法。例如:A 表示为 a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0 如果我要旋转 4 位,答案将是 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0 a15 a14 a13 a12
我试过串联,但结果是不正确的。需要大家帮忙...
我是一个verilog的新手.
我做了很多研究,最后编写了这段代码,但似乎无法正常工作.
任何人都可以帮我解决吗?
module comparator();
reg[3:0] a, b;
wire[1:0] equal, lower, greater;
if (a<b) begin
equal = 0;
lower = 1;
greater = 0;
end
else if (a==b) begin
equal = 1;
lower = 0;
greater = 0;
end
else begin
equal = 0;
lower = 0;
greater = 1;
end;
initial begin
$monitor($time,
"a=%b, b=%b, greater=%b, equals=%b, lower=%b",
a, b, greater, equal, lower);
a=9; b=10;
#100 $display ("\n", $time, "\n");
end
endmodule
Run Code Online (Sandbox Code Playgroud) ^Verilog hdl 语言中的插入符号 ( ) 是什么意思?a在带有输入和b输出的verilog公式中c,这c = a ^ b意味着什么?