verilog基础问题求助
编写16位*16位booth加法器,模拟时reset信号一置1(低位有效),输出就变红xxxx,折腾好久弄不明白原因在哪,求助大佬
图为模拟
代码如下
module booth_multiply(
input clk,
input reset,
input [15:0] a,
input [15:0] b,
output reg [31:0] z
);
reg [32:0] multiplicand, accumulator;
reg [16:0] multiplier;
integer i;
always @(posedge clk) begin
if (!reset) begin
z <= 32'h0;
end
else begin
multiplier[16:0] <= {1'b0, b};
multiplicand[32:0] <= {17'h0, a};
accumulator[32:0] <= 33'h0;
for (i = 0; i < 16; i = i+1) begin
case (multiplier[1:0])
2'b00, 2'b11: begin
// Do nothing
end
2'b01: begin
accumulator <= accumulator + multiplicand;
end
2'b10: begin
accumulator <= accumulator - multiplicand;
end
endcase
accumulator[32:0] <= {accumulator[31:0], multiplier[0]};
multiplier[16:0] <= {multiplier[15:1], accumulator[32]};
multiplicand[32:0] <= {multiplicand[31], multiplicand[32:1]};
end
z <= accumulator[31:0];
end
end
endmodule
`timescale 1ns / 1ps
module tb_booth_multiply;
parameter DATAWIDTH = 16;
reg clk = 0 ;
reg reset = 0 ;
reg [ DATAWIDTH - 1 : 0 ] a = 0 ;
reg [ DATAWIDTH - 1 : 0 ] b = 0 ;
wire [ DATAWIDTH * 2 - 1 : 0 ] z = 0 ;
always #5 clk=~clk;
initial
begin
reset =0;
clk=1;
end
booth_multiply e(
.clk(clk),.reset(reset),.a(a),.b(b),.z(z)
);
initial
begin
#20
reset = 0;
#20
reset = 1;
a = 16;
b = 4;
#100
reset = 0;
end
endmodule
...全文
相关推荐
FPGA开发板Verilog例程(基础+进阶)
通过"大西瓜FPGA开发板例程(基础+进阶)"的学习,你可以逐步掌握FPGA开发与Verilog设计的核心技能,为未来的电子系统设计打下坚实的基础。
【Verilog】二、Verilog基础语法
FPGA Verilog基础语法
【Verilog】Verilog基础语法
Verilog基础语法 逻辑值 逻辑0: 表示低电平,对应电路GND 逻辑1:表示高电平,对应电路VCC 逻辑X:表示未知,输入端存在多种输入情况,可能是高电平,也可能是低电平 逻辑Z: 表示高组态,外部没有激励信号,是一个悬空状态 数字进制格式 一般常用二进制(b)、八进制(o)、十进制(d)和十六进制(h) 二进制:4’b0101->4位宽的二进制数值 0101 十进制:4’d2 ->4位宽十进制数值2(表示二进制0101) 十六进制:4’ha ->表
verilog激励产生基础
Verilog激励产生基础Verilog是一种Hardware Description Language(HDL),用于设计和验证数字电路。
Verilog基础语法讲解
Verilog是一种用于电子系统设计和硬件描述的硬件描述语言(HDL),广泛应用于FPGA和ASIC设计领域。Verilog语法的基础包括了模块定义、端口声明、信号类型、赋值语句和注释等概念。


硬件设计
