如何在verilog中设计16位超前进位加法器

我在verilog中设计16位超前进位加法器时遇到了一些麻烦。我这里有代码: module fulladder(a, b, c, s, cout); input a, b, c; output s, cout; xor #0 g1(w1, a, b), g2(s, w1, c); and #0 g3(w2, c, b), g4(w3, c, a), g5(w4, a, b); or #0 g6(cou

Verilog 如何减小多路复用器的大小

这是我设计内存模块的简单verilog代码(我想让我的代码更高效) 当我写入数据时,输出[0:7]=内存[address][0:7]它创建一个8X1多路复用器 通过写作 module memory_module (input clk,input[0:6] address,input [0:7]data_input, input read_write,output [0:7] data_output,input enable,output ready); reg ready;

在verilog中实现PIPO

我希望在verilog HDL中实现32位并行并行输出。这是我写的代码 module pipo(input_seq, answer,reset, clock); input [31:0] input_seq; input reset,clock; output [31:0] answer; always @ (reset) begin if(!reset) begin answer[3

Verilog 同一位置的两个输入信号总是阻塞

我正在使用DE2-70板,我试图使用它的一些按钮作为输入。按钮在0处激活,我需要检查两个按钮是否分别按下,以增加/减少数字 我尝试执行以下操作,其中iKEY是按钮,position是我试图修改的数字: reg [4:0] position; position = 5'b0; output wire enable = !(iKEY[3] && iKEY[2]); always @(posedge enable) begin if(iKEY[3] == 0)

Verilog中的Always语句

我正在使用异步清除的t_触发器为8位同步计数器编写代码。这是我的密码: module T_ff(CLK,E,CLEAR,T,Q); input CLK,E,CLEAR,D; output reg Q; always@(posedge CLK, negedge CLEAR,E,T) begin: if(~CLEAR) Q<=1b'0; else if (E == 1) Q<=Q^T; en

移除verilog推断锁存(递增寄存器)

基本上,当state=2时,我希望“rowcounter”保留其当前值,而当state=3时,我希望“rowcounter”递增 我在合成上述代码时遇到了一个问题,它说存在推断锁存。我跟踪了闩锁,发现它们是在状态为“2”或“3”时定位的。即使我已经将“rowcounter”的初始值设置为零,如下所示 always @(state) begin case (state) zero: rowcoun

Verilog预处理器字符串连接

我试图在Altera Quartus中使用Verilog预处理器宏,要求在变量名中使用参数值 例如: `define INCREMENT_COUNTER(parsername) \ __parsername_counter <= __parsername_counter + 4'h1; 但是,parsername未正确替换并返回 __parsername_counter <= __parsername_counter + 4'h1; \uuuu parsername\u coun

尝试使用if/else块时,verilog(vcs)中出现奇怪错误

我正试图写一个“反相器”功能为2的恭维加法器。我的讲师希望我使用if/else语句来实现它。该模块应采用8位数字并翻转位(因此0到1/1到0)。我写了这个模块: module inverter(b, bnot); input [7:0] b; output [7:0]bnot; if (b[0] == 0) begin assign bnot[0] = 1; end else begin assign bnot[0] = 0; e

verilog中的数据移位

我有一个32位的数字。我只需要它的前8位。我想我可以通过两种方法做到这一点:一种是将数字右移到24位,另一种是简单地将最后8位赋给一个变量。 以下是我试图做的: module Data_shiftin( input reset_n, clk, input [31:0] data_in, output [31:0] data_out ); reg [31:0] data_reg; reg data_out; always @ (posedge clk) begin

Verilog Testbench文件中的语法错误

我正在尝试为Modelsim(verilog)中的时序电路创建一个测试台文件。但是我得到了以下语法错误 **错误:(vlog-13069)/Assignment_2x2_tb.v(6):接近“initial”:语法错误,意外的首字母,应为“;”或",", 这是我的密码 module seq_circuit1_tb; reg x,clk; wire q; seq_circuit1 seqct(x, clk, Q0, Q1) //Module to generate clock with perio

带有初始值verilog代码的1秒下降计数器

我想写一个1秒倒计时计数器的代码,从外部获取初始值并倒计时到0。但有一个问题。如何获得初始值。我试过一些方法,但是。。。。 代码如下: module second_counter ( input clk, input top_num, output reg [3:0] sec_num ); parameter clk_frequency

Verilog中的算术方程除以带时钟的电平,接收“;闩锁警告“;请提供建议

更新:我正在编辑这个问题,以将方程更改为更简单的方程,尽管问题大致相同,但这次我实际上可以让它给出正确的计算答案,但我一直存在“锁存”问题。(我原来的方程也运行良好,但相同的警告锁存问题) 我想一步一步地做一个简单的等式,如下所示: c = 50 / (|a - 2|^2 + |b - 5|^2) 数据是无符号的二进制32位值,减法结果也是无符号的(绝对值),我要做的是使用时钟分几步执行 |a - 2| ,

Verilog-错误:";未解析引用“;模拟时

使用ModelSim。我试图模拟一个上下两位计数器。它可以很好地编译,但当我尝试运行模拟时,出现以下错误: **错误:(vsim-3043)D:/ModelSim/examples/Lab7.v(46):未解析对“状态”的引用 模块是: module TwoBitCounter(input Dir, clock, reset); reg[1:0] state; parameter S0 = 2'b00, S1=2'b01, S2=2'b10, S3 = 2'b11; always @(po

在verilog模块中处理无效或非法输入组合的最佳实践是什么?

当我为一个需要几个控制输入的较大项目编写模块时,处理无效或非法输入组合的最佳实践/标准是什么 例如,我有一个队列,它有三个控制信号-Enqueue、Dequeue和Delete。假设一个循环中只能执行一个操作。因此,一次只能断言一个输入信号。现在,当某个父模块一次驱动两个控制信号时,处理这种情况的正确方法是什么 在我的项目中,我可以以任何方式处理它,我会小心避免它。但在整个公司范围内,可能会有人后来搞砸并不当使用它。预防这一问题的做法是什么?或者换句话说,我在verilog中寻找类似于try c

Verilog 如何在其他模块中连接其他模块的输入输出端口?

我试图理解verilog,尤其是inout端口 为了理解,我实现了如下。但我认为我在tb模块中使用“my_top”模块有问题 如何连接到“tb”模块中的“my_top”模块之间? 我还想使用initial语句测试tb模块中的my_top模块 如何连接以查看tb模块中my_top模块的工作情况 module tb; reg data_tri; reg data_tx; reg data_rx; wire data_io; my_top u_my_top( .

8x8乘法器代码和测试台不工作(shift-add-verilog)

我对verilog非常陌生,正在尝试使用shift-add方法制作8x8位乘法器。我似乎无法让我的代码正常工作,我不确定这是语法问题还是逻辑错误。我还附加了testbench文件,因为我不确定是否100%正确。当我运行模拟时,它说所有的输入和输出都是z。更新:我已经将实例添加到测试台上,但仍然得到z输出和输入 `timescale 1ns / 1ps module lab6code( input [7:0] mp, mc, input start, output r

在Verilog中使用SR触发器模块创建JK触发器模块

我已经为SR锁存器、SR触发器(通过实例化SR锁存器模块)和JK触发器(通过实例化SR锁存器模块)编写了verilog模块。我正在使用Xilinx Vivado 2019版进行模拟和查看输出波形。SR锁存器和SR触发器模块工作正常,我也得到了正确的输出波形。我尝试通过实例化SR锁存模块来创建JK触发器模块。但是我没有得到输出波形。我不知道出了什么问题。我也检查了布尔表达式。一切似乎都很好。有人能指出错误吗 这是密码 SR闩锁模块 module sr_latch(s, r, q, qbar);

Verilog中整数和reg变量类型之间的区别是什么?

在使用Verilog几个月后,我很好奇以下两者之间的区别: reg [31:0] sum; integer sum; 既然整数只是一个32位的值,为什么不能用reg来表示呢?为什么一个在内存使用或访问时间方面可能比另一个更有效?请让我知道你的想法,或者如果你需要我进一步阐述我的问题 使用整数的示例: 使用注册表的示例: 在20世纪80年代Verilog的诞生之初,integer是一种有符号、无大小的4状态整数类型。其物理大小是从模拟主机工具推断出来的。合成工具用于根据使用的上下文推断其大小,

verilog和gate在32不正常工作时

大门 module andgate #(parameter Port_Num = 2, parameter WIDTH=8) ( input [(WIDTH-1):0] a, input [(WIDTH-1):0] b, input [(WIDTH-1):0] c, input [(WIDTH-1):0] d, input [(WIDTH-1):0] e, input [(WIDTH-1):0] f, input [(WIDTH-1):0] g, input [(WIDT

Verilog 在测试台上显示信号名称/文字

是否可以在Verilog中引用/显示信号的名称/文字 这将是在Verilog测试台上创建通用信号检查功能的有用功能 我知道%m将在使用$display()时打印信号的范围。是否有显示信号名称的等效程序?在Verilog中,唯一的方法是使用PLI/VPI编写C代码 在SystemVerilog中,可以使用引用宏 `define QUOTE(q) `"q`" `define DISPLAY(me) $display("Signal %s is %h",`QUOTE(me), me) `DISPLA

当下一状态组合逻辑块转换中的“当前状态”值时,系统Verilog FSM“下一状态”不转换-三值运算符

在我的Verilog代码中,ns值没有分配给下一状态逻辑中的任何值。当我对下一个状态逻辑进行编码时,每当ps中发生转换时,就为ns状态变量分配一个值 以下是FSM代码片段 // State registers always@(posedge clk, negedge rst) begin if(!rst) ps <= S1; else ps <= ns; end assign present_state = ps;

Verilog 条件A>;B>;C没有得到正确的输出

我制作了一个程序,能够比较3个输入,得到最大值(F) 问题是我无法获得问题的预期输出。 期望: A B C F 001(1) 111(9) 100(4) 111(9) 001(1) 001(1) 001(1) 000 实际产量: 模块输入比较器(A、B、C、F); 输入[2:0]A; 输入[2:0]B; 输入[2:0]C; 输出寄存器[2:0]F; 总是开始 如果(A>B>C)开始 F=A; 结束 否则,如果(A>B您不应该尝试像这样链接比较运算符:A>B>

如何使用组合逻辑中的内存合成verilog代码。?

我使用Verilog代码组合逻辑中的缓冲区,我尝试使用spyglass合成工具合成Verilog代码。但我做不到。 显示 错误:为信号缓冲器A、缓冲器B推断闩锁 我在下面附上我的Verilog代码,有人能帮我解决这个问题吗 多谢各位 这是我的密码: module FIFObuffer (Clk,Reset,Enable, dataIn,dataOut); input Clk,Reset,Enable; input signed[16:0]dataIn; outp

Verilog代码在FPGA上模拟但不按预期运行

我对我的代码做了一个行为模拟,效果非常好。结果与预期一致。当我综合我的代码并将其上传到spartan 3e FPGA中,并尝试使用chipscope进行分析时,结果甚至与我预期的不太接近。我做错了什么? 您的问题在于第13-16行,其中设置了状态寄存器的初始值: reg [OUTPUT_WIDTH-1:0] previousstate = 0; reg [OUTPUT_WIDTH-1:0] presentstate = 1; reg [6:0]

Verilog 使用时钟边缘触发器的动作计时

假设我有一个如下代码: always @(clock) begin if (condition is met) a <= 0 else if (another condition is met) b <= 0 end 始终@(时钟) 开始 如果(满足条件) a始终使用两个块。一个用于posedge,另一个用于negedge always @(posedge clock) begin if (condition is met) a <=

Verilog 使用Quartus II将.txt文件加载到FPGA中?

因此,我是FPGA新手,目前正在使用Altera DE-1板和Quartus II软件,并将其用于硬件项目。所以这里是我的问题,我有一个.txt文件,其中包含0和1的二进制图像数据,将这些数据加载到FPGA上的寄存器以便进一步计算的最佳方法是什么。使用SDRAM?ROM 我目前正在用verilog进行编码,并在前面使用了verilog文件I/O语句,但我在某处读到它显然不能用于合成。那么,对我来说,什么是最好的方法呢。欢迎提出任何建议。谢谢:)使用quartus megawizard创建rom

verilog行为模型中的错误结果

尽管存在键入错误,但我主要担心执行默认语句的case构造 我将always@(in1,in2)更改为always@*,并观察到算术移位操作工作不正常。我更改了以下内容: 现在我得到了正确的结果 `timescale 1ns / 1ps module simpleBmul(res,in1,in2); output [15:0] res; input [7:0] in1,in2; reg [15:0] res; reg FF; initial begin FF=1'b0; re

Verilog 是否可以在generate for循环中递增整数/genvar

我在其他地方读到过,这种语法j=j+1是不允许的,但是否可以在for循环的循环表达式之外增加变量 这是我最初想做的。我不确定如何生成这个generate语句,所以我在想,我想用参数20、21、22、23、25、28、29、31生成模块,同时使用使用0、1、2、3、4、5、6、7索引的2d参数数组中的值。所以我想,我只需要为循环创建一个变量,然后有第二个变量j,它从0开始,到7。我可以这样做吗?如果没有,建议是什么 genvar i; integer j = 0; generate

查询:VGA控制器(Verilog)Basys 2板中使用的时钟分频器错误

我在VGA控制器(Basys 2板)中加入时钟分频器(40 MHz)时出错。我的编码错误是-输入缓冲区实例\u name/CLKIN\u IBUFG\u INST的端口I连接到GND。 请帮助删除此错误 代码如下: module anymodule(input wire clk,reset, output wire hsynch,vsynch, output [2:0] red, output [2:0] green, output [1:0] blue, output video_on);

用于计数数字重复的Verilog代码

我正在为一个算法编写verilog代码,但有一个模块有一个问题,例如:从前一个模块接收10个二进制数(每一个4位)(每个正边缘clk有1个输入),因此有10个时钟周期来接收10个二进制数 如何计算每个数字重复的次数,并保存每个数字的频率,以供以后使用verilog hardawre语言的其他模块使用? 例如:在本模块末尾,两次查找0000,一次查找0001,…,1111零。在10个时钟周期 提前感谢…假设您有一个时钟和有效的低电平重置: module tracker( input clk,

Verilog 传递给$fclose的文件/多通道描述符(2)无效

这是2月5日发布的一个问题的后续问题。我不知道如何跟进这一线索,因此提出了这个新问题 我已经更新了测试台附件。它包含建议的$fwrite等。 现在得到警告: 在中传递给$fclose的文件/多通道描述符(2)无效 AA2.txt文件为空。使用$fwrite(而不是$fmonitor),它可以工作,但具有相同的警告。我应该无视这个警告吗?我还尝试使用基于DUT输出信号(negedge ASM_标志)状态的“重置”(见代码),该信号在模拟结束时从1变为0,以停止写入文件,但重置始终为1,因此没有输出

Verilog 棒形as和栅极的合成

这里有多个用于1位端口x的驱动程序。我想用wandnet类型解决它。当我查看示意图时,只有输入端口的最低有效位连接到端口x,而其余位为未读。我希望使用a的所有位,并使用and gate将其分配给x端口,以解析多个驱动程序 module test(input [3:0]a, output [1:0]b); wire [3:0] d [1:0]; wand temp; assign temp=a; inst inst_name (.x(temp),.y(d[1][3]),.z(b

Verilog 如何在文件中写入负整数?

我在Verilog中有一个ALU,我想把ALU的输出写入一个文件。我正在使用以下代码: $fwrite(File,"La salida es: %d",uut.ALUOutput); 我的输出向量大小为32位(有符号)。该操作是正确的,但当ALUOutput为负数时,在文件中,输出将以无符号整数的形式保存 例如,在负数的文件中,我得到了以下不正确的表示: 4294967264 但是,我想得到以下结果: -32 如何在文件中写入负数?使用$signed(,第11.7节“签名表达式”): mo

Verilog将一位线路升级为64位总线

我有一个64位总线,我想&总线的每一位都有一位导线。最好的方法是什么?我想做下面这样的事情,但它似乎不像预期的那样工作 logic [63:0] bus, other_bus; logic signal; ... bus = other_bus & signal; 复制信号64次。参考IEEE标准1800-2012第11.4.12.1节“复制操作员”: 你也可以试试这个:- 对于(i=0,i bus = other_bus & {64{signal}};

为什么verilog中会发生以下重新声明错误?

我正在尝试实现一个简单的verilog代码,如下所示: module test1( input ACLK, input RST, output test_output1, output test_output2 ); //wire ACLK; //wire RST; reg test_output1; reg test_output2; assign test_output1 = ACLK; always @(posedge ACLK or ne

在Verilog中更改参数值

我想根据3位数字输入引脚值更改Verilog中的参数值。 这是我的verilog代码的一个示例 paramter real C_IP=0; always @ (reg_DACIP) begin case (reg_DACIP) 3'b000 : C_IP = 0.8; 3'b001 : C_IP = 0.6; 3'b010 : C_IP = 0.4; 3'b011 : C_IP = 0.2; 3'b100 : C_I

Verilog HDL?操作人员

?在Verilog中做什么 例如:下面的命令是什么意思 input first_din; input [7:0] din; output [127:0] parity; reg [127:0] parity; wire [7:0] feedback; assign feedback = din ^ (first_din ? 8'b0 : parity[127:120]); 在此代码中,?是“条件运算符”(?:)的一部分。参考免费IEEE标准1800-2012,表11-1-

verilog在modelsim中的仿真结果

对于我的作业,我需要在日志文件中记录我在modelsim中的verilog模拟结果。我已经拍摄了波形窗口的屏幕截图。除此之外,我还从成绩单窗口中取出了打印件 有没有办法把成绩单存入日志文件 请解释用于存储我的verilog仿真结果的命令。A.vcd文件是一个IEEE 1364-1995标准文件,其中包含对调试仿真有用的所有仿真波形信息。它包含设计中的所有信号,因此如果需要在波形窗口中添加信号,则无需重新运行模拟 要创建.vcd文件,请执行以下操作: 1) 在转录本窗口中成功编译和加载设计 2)

在Verilog中创建Demux

你好,我有一个关于verilog的家庭作业 我的任务是: ''当中断被断言时,s1寄存器将给出中断子程序中中断的计数器编号。当更多 如果收到一个以上的中断,s1寄存器将给出优先编码器的输出 模式: 我设计了这个模式,并在verilogrtl中看到了除demux部分之外的其他模式。 我怎样才能看到demux部分与其他部分一起 这是我的verilog top_模块代码。 计数器,优先编码器,皮开朗日是给我的 我试着写一篇精彩的文章 module top_module( input cloc

verilog输出卡在最后一个if语句上

问题:我正在合成我的代码,它读取1200个16位二进制向量,分析它们,并根据4个if语句的行为设置一个名为classe的2位寄存器。问题似乎是classe被卡在最后一个if语句上,其中classe被设置为第11位或第3位 当我使用测试台时,我的代码工作得很好 我认为它被卡住了,因为不知何故,always块一次读取所有1200个向量,如模拟中所示,而不是每个时钟边缘读取一个向量 我在这里附上了一个模拟屏幕截图: 模块最终\u最终\u代码 ( 输出寄存器[0:1]类 ); reg[0:15]内存[0

Verilog 在两个方向上将输入端口分配到输入端口

出于模拟的目的,我想使用Verilog创建一个只有2个输入输出端口(比如说左和右)的块,该块将从左到右或从右到左传输信号。可以假设该块仅在转换期间处于活动状态,并在剩余时间内等待输入。但我不允许使用任何其他端口。因此,理论上,模块定义如下: module blackbox(inout left, inout right) assign left = right; assign right = left; specify (left => (right:1'b1)) =

Verilog 允许在包内重新声明某些参数以进行模拟

我有一个系统,它有一些秒级的超时,为了模拟的目的,我想把它们减少到微秒或毫秒 我用FPGA时钟的时钟周期数来定义这些超时。举个例子 package time_pkg parameter EXT_EN_SIG_TIMEOUT = 32'h12345678; ... endpackage 我将计数器与常量全局参数EXT_EN_SIG_TIMEOUT进行比较,以确定是否是断言启用信号的正确时间 我希望在名为time\u pkg.v的文件中的名为time\u pkg的包中定义此参数(以及其他一些参数

如何在系统verilog中驱动来自2个源的信号

我正在尝试编写一个RTL模型,在这个模型中我监视独立的时钟源。这些时钟源可以具有可变频率(范围5至50MHz) 让我们说clk1和clk2。我试图驱动一个信号“切换”,它在clk1的每个posedge设置为“1”,在clk2的每个NEGDEDGE设置为“0”。我很难理解这个模型 我尝试使用一个在clk1正边缘触发的触发器,该触发器的输入绑定到“高”,另一个在clk2负边缘触发的触发器,输入绑定到“低”。我将这些输出发送到一个多路复用器,但是我很难弄清楚如何驱动这个多路复用器的选择信号 以下是我的

时钟选通verilog代码工作不正常

我试图编写一个时钟选通逻辑,它只允许数据在posedge写时钟时通过。代码在EDA中编译正确,但输出不符合预期。因此根据代码 @ (posedge write_clk_en)begin data_in[3] <= 1'b1; end @(posedge写入时钟)开始 [3]中的数据在初始块内,将NBA更改为BAs。NBA只能在always@(posedge时钟信号)块中使用 还要考虑到,在模拟中,@(posedge时钟信号)块(不带保留字始终)被视为延迟(等待上升沿clk事件发生,然后

在Verilog中调用模块

我刚开始用Verilog学习硬件编程,我感到很失落,因为我不明白错误的含义。 在这里,我调用模块reg31 module nbit_register(input clk, input [31:0]in, input reset, input L, input load, input shift, output reg[31:0] out); always@(*)begin if(load==1) reg32 add(clk, in, reset,L, out); else

为什么Verilog输出显示x和z而不是0和1?

我正在模拟一个由三个D触发器组成的移位寄存器。有三个输入(clk、reset、shiftIn)和一个输出(shiftOut)。复位为同步激活高电平,并复位所有触发器 设计 module shiftReg(shiftIn,clk,reset,shiftOut); input shiftIn, clk, reset; output shiftOut; reg Q1,Q2,shiftOut; always @(posedge clk or posedge re

Verilog 输入即输出

根据图表,我正在做ALU控制连接ALU 这是我的想法,在ALU控制中输入作为输出 这是我的密码 ALU控制 module ALUControl( ControlSignal, outALU ); input [5:0] ControlSignal; output [5:0] outALU; assign outALU = ControlSignal; // output as input generate case ( ControlSignal )

Verilog 调用其他模块的最佳方式是什么?

我对连接感到困惑,我想使用ALU调用RippleCarry模块,我需要执行分支,而不总是执行块和过程分配 我不知道什么方法最好。我看到其他人在TestBench.v或ALU.v中编写过 这是我的密码 铝钒 涟漪阵 module RippleCarry( input [31:0] a, b, input Cin, output Cout, output [31:0] Sum ); 在verilog中,不调用模块,而是实例化模块。与传统编程不同,verilog是一种硬件描述

  1    2   3   4   5   6  ... 下一页 最后一页 共 53 页