64 位 ALU 输出在 TestBench 波上显示高阻抗

2023-12-02

我必须制作一个 64 位 ALU,它接受 A 和 B 64 位输入、进位输入输入并输出 64 位结果以及 1 位进位输出。还有一个 5 位功能选择 FS。其中 FS[0] 控制 B 是否反转(使用 2to1 多路复用器)。F[1] 对 A 执行相同操作。FS[4:2] 确定哪个操作(加法、减法、逻辑运算等)使用 8to1 Mux。下面是 ALU 和 Testbench 的代码。

我非常确定我的测试平台很好,ALU 的所有单独组件也很好。我对实例化和连接所有输入/输出的顶层不太有信心。波形中出现高阻抗的原因是什么?

module ALU(A, B, FS, cin, cout, result); 
input [63:0] A, B;
input [4:0] FS;
input cin;
output cout;
output  [63:0] result;


eight_one_mux u7 (firstoutA & secoutB, firstoutA | secoutB, sum, firstoutA ^ secoutB,
left, right, 1'b0, 1'b0, FS[4:2], result);

adder u6 (firstoutA, secoutB, cin, sum, cout);

firstmux u1 (A, !A, FS[1], firstoutA);

secmux u2 (B, !B, FS[0], secoutB);

Alu_shifter u5 (A, left, right);


endmodule 
//--------------------------------------------------------------------------------//
//These are the two muxes to split into input and inverted input A,B
module firstmux(a, nota, firstS, firstoutA);
input [63:0] a, nota;
input firstS;
output reg [63:0] firstoutA;

always @(a or nota or firstS) 

begin

case(firstS)

0 : firstoutA = a;
1 : firstoutA = nota; 
default : firstoutA = 1'bx;

endcase
end

endmodule
//<><><><><><><>//
module secmux(b, notb, secS, secoutB);
input [63:0] b, notb;
input secS;
output reg [63:0] secoutB;

always @(b or notb or secS) 

begin

case(secS)

0 : secoutB = b;
1 : secoutB = notb; 
default : secoutB = 1'bx;

endcase
end

endmodule
//--------------------------------------------------------------------------------//


//This is the Shifter Blocks
module Alu_shifter (shiftA, right, left); //This shifter block shifts the A input once right or left
  input [63:0] shiftA;
  output [63:0] right;
  output [63:0] left;
  
  shift_right w1 (    //instantiate right shifter block
  .a_R(shiftA),  
  .R(right)
  );
  
  shift_left w2 (   //instantiate left shifter block
  .a_L(shiftA),
   .L(left)
  );
  
endmodule
////////><><><><><><><><><><><><><><><///////
module shift_right (a_R, R); // right shifter block
input [63:0] a_R;
output [63:0] R;
assign R = a_R >> 1;  //shift A right once (shift in a 0)
 endmodule


module shift_left (a_L, L);  //left shifter block
input [63:0] a_L;
output [63:0] L;
assign L = a_L << 1; //shift A left once (shift in a 0)
endmodule
//End shifter blocks (3 total modules)
//----------------------------------------------------//////////////////////
//This is the Adder that Adds A, B and cin
module adder(addA, addB, nic, sum, cout);
input [63:0] addA, addB;
input nic;
output [63:0] sum;
output cout;

assign {cout, sum} = addA + addB + nic;


endmodule

//----------------------------------------------------//////////////////////
//This is the 8to1 Mux that decides which operation is put forward
module eight_one_mux(D0, D1, D2, D3, D4, D5, D6, D7, S, out);
input [63:0] D0, D1, D2, D3, D4, D5, D6, D7;
input [2:0] S;
output reg [63:0] out;

always @(D0 or D1 or D2 or D3 or D4 or D5 or D6 or D7 or S) 

begin

case(S)

0 : out = D0; //And
1 : out = D1; //Or
2 : out = D2; //Adder
3 : out = D3; //xor
4 : out = D4; //lefter
5 : out = D5; //righter
6 : out = D6; //GND
7 : out = D7; //GND
default : out = 1'bx;

endcase
end

endmodule
////////////-------------------------------////////////////////////////////
module ALU_tb();

reg [63:0] A, B;
reg [4:0] FS;
reg cin;

wire cout;
wire [63:0] result;


     
     ALU dut (
     .A(A),
     .B(B),
     .FS(FS),
     .cin(cin),
     .cout(cout),
     .result(result)
                    );


initial begin
A = 8'b11001100;
B = 8'b11001101;
FS = 5'b01101;
cin = 1;
end

always
#5 cin <= ~cin;

always begin
#5
A <= A + 1;
B <= B + 2;
#5;
end

initial begin
#100 $finish;
end
endmodule
```

意外的高阻抗(z)值通常是非驱动信号的结果,这就是您的代码的问题。

adder u6 (firstoutA, secoutB, cin, sum, cout);

在上面的行中,您连接 1 位信号firstoutA到 64 位addA输入端口。这连接firstoutA to addA[0],其余 63 位未被驱动。因此,addA[63:1]都是z.

firstoutA是一个 1 位信号,因为您没有明确声明它。此外,未声明的信号被假定为类型wire,默认为z。 声明所有信号是一种很好的做法。

要查找所有未声明的信号,请将其添加到代码顶部:

`default_nettype none

您应该会收到如下编译错误:

Error-[IND] Identifier not declared
  Identifier 'firstoutA' has not been declared yet. If this error is not 
  expected, please check if you have set `default_nettype to none.

Error-[IND] Identifier not declared
  Identifier 'secoutB' has not been declared yet. If this error is not 
  expected, please check if you have set `default_nettype to none.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

64 位 ALU 输出在 TestBench 波上显示高阻抗 的相关文章

  • 异步FIFO设计之格雷码

    目录 二进制转格雷码 格雷码转二进制 相邻的格雷码只有1bit的差异 因此格雷码常常用于异步fifo设计中 保证afifo的读地址 或写地址 被写时钟 或读时钟 采样时最多只有1bit发生跳变 在不考虑路径延时的情况下 因为源数据 读写地址
  • x 和 z 值在 Verilog 中到底代表什么?

    Verilog 标准定义了四种类型的位值 0 1 x 和 z 其中 0 表示低 1 表示高 x 表示未知 z 表示未驱动网络 有几个问题 x 是否意味着我们不知道该值是 0 还是 1 0 或 1 或 z 或者该值是未知的并且可以是 0 1
  • 用于 Verilog 或 SystemVerilog 的 TAP(测试任何协议)模块

    是否有 TAP 测试任何协议 http testanything org Verilog 的实现 那就太好了 因为这样我就可以使用证明来自动检查我的结果 更新 10 9 09 有人问为什么不使用断言 部分 TAP 为我提供了一些很好的报告
  • wait 语句必须包含带有 UNTIL 关键字的条件子句

    以下VHDL将用于测试平台 在分析过程中 我在第一个等待语句上不断收到错误 等待语句必须包含带有 UNTIL 关键字的条件子句 我有几个这样编写的工作测试台 我似乎无法找到可能是什么错误 library IEEE USE IEEE std
  • 使用 Verilator 和 VPI 读取寄存器数组

    所以我在我的verilog中定义了以下寄存器 reg 31 0 register mem 0 15 verilator public 我的目标是从我的 verilator c 代码中读取存储在其中的 16 个值中的每一个 我发现有关 VPI
  • 将枚举转换为逻辑

    考虑以下模块声明 module DFF d q CLK RESET parameter W 2 input W 1 0 d input CLK input RESET output logic W 1 0 q endmodule 当 d 和
  • 在逻辑中使用单端端口期待差异对?

    我使用的逻辑被设置为需要一个差分对时钟端口 然而 对于一个特定的应用程序 我只能输入一个单端时钟 由于硬件限制 修改逻辑以接受单端时钟不是一种选择 因为涉及许多文件和代码行 有没有办法可以输入单端端口并以某种方式将其馈送到模块的差异对端口
  • verilog 中的“<<”运算符

    我有一个verilog代码 其中有一行如下 parameter ADDR WIDTH 8 parameter RAM DEPTH 1 lt lt ADDR WIDTH 这里将存储什么RAM DEPTH以及什么是 lt lt 操作员在这里做
  • 如何在Altera Quartus中生成.rbf文件?

    什么是 rbf 文件以及如何在 Windows 上从 Quartus 输出文件 sof 生成它们 An RBF is a 原始二进制文件例如 它代表原始数据 这些数据将被加载到闪存中 以便在上电时初始化 FPGA A SOF is an S
  • VHDL 中的 BRAM_INIT

    我正在模拟基于处理器的设计 其中程序存储器内容保存在 BRAM 中 我正在使用 VHDL 推断 BRAM 实现程序存储器 我试图避免使用 CoreGen 因为我想保持设计的可移植性 最终该设计将进入 FPGA 我想看看是否有一种方法可以使用
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • 如何在 Verilog 中综合 While 循环?

    我尝试设计一个 Booth 乘法器 它在所有编译器中运行良好 包括 Modelsim Verilogger Extreme Aldec Active Hdl 和 Xilinx Isim 我知道模拟和综合是两个不同的过程 而且只有少数Veri
  • Verilog 中的“net”代表什么?

    我刚刚开始学习Verilog 据我了解 Verilog有net数据类型 什么是net代表 网络就是这样一种数据类型 您不使用它来存储值 它们代表物理连接 您可以将线路视为一种网络数据类型 你可以去网上看看更多here http www ee
  • 如何使用 don't cares 参数化 case 语句?

    我有一条称为输入的电线 我想检测前导的数量 我正在尝试创建一个模块 该模块使用下面的 case 语句根据前导零的数量更改输出数据 然而 输入的大小是可参数化的 如果 X 是固定值 4 我将创建一个 case 语句 case input 4
  • 向左旋转 verilog 大小写

    我的任务是用verilog编写一个16位ALU 当我做需要旋转操作数和进行2的补码加法和减法的部分时 我发现了困难 我知道如何用纸和铅笔解决这个问题 但我无法弄清楚如何在 Verilog 中做到这一点 例如 A表示为a15 a14 a13
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S
  • 如何在Verilog中将二维数组中的所有位设置为0?

    我构建了一个 8 2bits 数组来表示 Verilog 中的一块内存 reg 1 0 m 0 7 该存储器有一个复位信号 如果复位为1 则该存储器中的所有位都应重置为0 但是我不知道如何以简洁的方式设置m的所有位 因为如果有数百个内存中有
  • Verilog 中的 If 语句和分配连线

    我试图弄清楚基于组合逻辑分配电线的基础知识 I have wire val wire x wire a wire b always begin if val 00 I want to assign x a if val 01 I want
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻
  • 我怎样才能让我的verilog移位器更通用?

    这里我有一个移位器 但现在它最多只能工作 3 位 我一直在寻找 但不知道如何让它工作最多 8 位 module shifter a b out input 7 0 a b output 7 0 out wire 7 0 out1 out2

随机推荐

  • 如何使用 Apache htaccess 重新排序 URL 参数/查询字符串?

    我有带有多面导航 过滤 的电子商务类别 过滤可以生成数千个 有用的 URL 我想减少nr 通过始终在相同的 URL 上以相同的查询字符串参数顺序显示某些内容来显示可能的 URL 从 SEO 的角度来看 我可以使用规范标签从逻辑上消除重复的
  • primefaces 数据导出器 XLS 仅导出标题而不导出行

    我的问题是 当我单击按钮导出数据表时 它仅导出列标题 我的 Excel 文件生成时没有任何行
  • 获取 HPUX 上正在运行的进程的可执行文件的完整路径

    我想使用 C 代码在没有 root 权限的情况下获取正在运行的进程 可执行文件 的完整路径 有人可以建议一种方法来实现这一目标 在 Linux 平台上 我可以使用以下方式来做到这一点 char exepath 1024 0 char pro
  • 删除边框线上方图像的顶部部分以检测文本文档

    Using OpenCV python I am trying to remove the section of image which is above the border line white area in this sample
  • end(explode) 严格标准:只有变量应该通过引用传递

    我有这段代码来获取文件的扩展名 extension end explode FILES rfile name 这在本地主机上工作正常 但是当我上传在线托管时 它给了我这个错误 严格标准 只有变量应该通过引用传递 为什么不使用pathinfo
  • 如何从 GIT 存储库历史记录中删除文件名中包含冒号 : 的路径的所有文件?

    我在 Debian 10 Linux 上的 GIT 存储库中存储了带冒号的 ISCSI 节点文件名 Example iscsi nodes iqn 2000 01 com synology NAS01 DS916 nas ff11 111
  • 使用 R 中的 rvest 包从下拉列表提交表单后从网页下载 csv 文件

    我正在开发一个网络抓取项目 从该网页下载各种 csv 文件 https whalewisdom com filer blue harbour group lp tabholdings tab link 我希望能够以编程方式在下拉列表中选择各
  • 如何摆脱证书过期的 ssl 安全警告

    过去我有一个 ssl 证书 但现在没有了 因为我没有使用它 但是 现在我看到我网站的一些页面在 google 上使用 https 建立了索引 单击这些链接会将您定向到安全警告 我怎样才能最好地解决这个问题 我尝试调整 htaccess 文件
  • 在 Java 中将字符串从 ASCII 转换为 EBCDIC?

    我需要编写一个 简单 实用程序来从 ASCII 转换为 EBCDIC Ascii 是从 Java Web 发展到 AS400 我用谷歌搜索了一下 似乎找不到一个简单的解决方案 也许因为没有一个 我希望有一个开源实用程序或为已经编写的实用程序
  • Ruby 中方法名称有哪些限制?

    例如 我找到了方法名称bundler 在下面的代码片段中 不知道是否 字符是专门的关键字或只是方法名称的一部分 This is a predicate useful for the doc guides task of applicatio
  • ICS 中未显示选项卡分隔符

    我有一个问题 setDividerDrawable 只能在低于 Ice Cream Sandwich 的版本中工作 当我运行模拟器时 选项卡显示完美 但没有分隔线 分隔线显示 模拟较低版本的 Android 时没有问题 我正在使用此代码来创
  • 中继器中的中继器

    我的中继器里面有一个中继器 其中父中继器绑定到Datatble其中有一列带有Datatable in it 我想将子中继器绑定到父中继器数据行中的数据表列 这可能吗 我想我可以直接在aspx文件如 DataSource 但它似乎不起作用 在
  • 使用私有静态方法的优点

    创建具有内部私有方法的类时 通常是为了减少代码重复 不需要使用任何实例字段 将该方法声明为静态是否有性能或内存优势 Example foreach XmlElement element in xmlDoc DocumentElement S
  • 如何更改 R 中多个箱线图中 x 轴的顺序

    我正在尝试更改此箱线图中 x 轴的顺序 现在顺序是放大镜 显微镜 视频 我想改为显微镜 放大镜 视频 数据框示例是这样的 Label Mental Physical Temporal Performance Effort Frustrati
  • 录制/捕获当前播放的音频

    我想在 UWP 或 Windows Phone 8 1 中捕获 记录当前播放的音频 同样的事情是由 MEE dj UWP 应用程序在其应用程序中完成的 该应用程序能够捕获应用程序中当前播放的音频 有知道这方面情况的朋友请分享一下你的答案 如
  • Python/Django——“and”运算符和“&”运算符有什么区别

    我有一个有趣的 Django 问题 考虑以下 Model objects filter Q id test1 and Q id test2 这会返回预期的结果 但是 Model objects filter Q id test1 Q id
  • 我想用Java获取格式化的日期

    我想买一个新的Date对象具有SimpleDateFormat应用于它 我想做这样的事情 SimpleDateFormat myFormat new SimpleDateFormat dd MMM yyyy kkmm Date today
  • 打开 renderDataTable 中的行名称

    我正在 Shiny 中显示一个表格并想要使用渲染数据表但它没有显示对我来说很重要的行名称 渲染表显示行名称很好 但看起来不太好 I have output tab lt renderDataTable tabplot 并尝试过 output
  • 内核中的native_write_msr是做什么的?

    我有一个 python 脚本 一开始有时会很慢 我跑了perf top前几天我看到的只是 PerfTop 2 irqs sec kernel 100 0 exact 0 0 4000Hz cycles target pid 1234 100
  • 64 位 ALU 输出在 TestBench 波上显示高阻抗

    我必须制作一个 64 位 ALU 它接受 A 和 B 64 位输入 进位输入输入并输出 64 位结果以及 1 位进位输出 还有一个 5 位功能选择 FS 其中 FS 0 控制 B 是否反转 使用 2to1 多路复用器 F 1 对 A 执行相