AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-21989922

gubang's questions

Martin Hope
gubang
Asked: 2023-10-04 10:07:17 +0800 CST

基于SV LRM的reg允许连续指派数测试问题

  • 5

我想根据 SV LRM 计算出一根线/寄存器中连续分配的数量是合法的。

我查看了 verilog 和 SV LRM,它说明了以下内容。

"Continuous assignments shall drive values onto nets or variables" - SV LRM 10.3
这意味着与 verilog 不同,允许对 reg 进行连续分配。
(连续分配应将值驱动到网络上 - verilog LRM 6.1)


"The continuous assignment statement shall place a continuous assignment on a net or variable data type." - SV LRM 10.3.2
这意味着线路/寄存器上的连续分配数量限制为 1。



综合以上两点,
我得出的结论是,wire 和 reg 在 SV 中只能有一个连续分配。


然后我想在Modelsim中检查编译情况。

> testing multi assignments in reg
module test_1;
    reg a;
    assign a = 1;
    assign a = 0;
    
endmodule

控制台:“'a'由多个连续分配驱动”
因此,该编译很好地找到了 reg 上的多重驱动。没什么可抱怨的。

>testing multi assignments on wire
module test_2;
    wire a;
    assign a = 1;
    assign a = 0;
    
endmodule

控制台:“ SVtest.sv 编译成功”
我预计结果会给出错误。
然而,这个编译并没有解决在线多驱动程序的错误。
这意味着 UVA 允许在线双驱动,这与我的预期完全不同。




问题摘要:
我对 SV LRM(线路/寄存器上只允许一次连续分配)的解释是否错误?或者只是模拟器没有严格反映SV LRM?

此外,我之前所做的解释(在verilog中,连续分配只允许在线一次,但不允许在reg上)也是错误的吗?(基于“连续分配应将值驱动到网络上 - verilog LRM 6.1”)

verilog
  • 1 个回答
  • 29 Views
Martin Hope
gubang
Asked: 2023-09-05 22:42:27 +0800 CST

我无法得知哪两个分配驱动器相互冲突

  • 6

我试图制作一个可以计算时间的手表,因为时钟周期是一分钟。但是,我很难找到哪两个作业发生冲突。(找了两天没找到)

首先,我在 EDA 游乐场中尝试了这些代码。

//code for "design.sv"

module clock(
  input clk, rstn,
  output reg[6:0] minute,      //line 1
  output reg[5:0] hour         //line 2
);

  
  always @ (posedge clk, negedge rstn) begin
    if(!rstn) begin
        minute <= 0; hour = 0;
        end
    else begin
        minute = minute + 1;
        end
  end
  
  always @ (posedge clk) begin
    if((minute%60==0)&&(minute != 0)) begin
        minute <= 0;
        hour = hour + 1;
        end
    
    if((hour%24==0)&&(hour !=0)) hour <= 0;
  end
  
  
endmodule

//code for "testbench.sv"
module test;
  reg clk, rstn;
  reg [6:0] minute;
  reg [5:0] hour;
  
  initial begin
    clk = 0;
    forever #5 clk = ~clk;
  end
  
  initial begin
    rstn = 1; minute = 0; hour = 0;    //line 3
    #30 rstn = 0;
    #1 rstn = 1;
    #600 $finish;
  end
  
  clock clock_inst(clk, rstn, minute, hour);
  
  initial begin
    $dumpfiles("wave.vcd");
    $dumpvars(0, test);
  end
  
endmodule

我模拟了这些第一个代码并得到了以下错误。

“变量“分钟””不能同时由过程赋值语句和连续赋值语句驱动。“变量“小时””不能同时由过程赋值语句和连续赋值语句驱动。

我的第一个结论:我的结论是line 1和上的作业line 2与 的作业发生冲突line 3。我认为output reg minute和output reg hourinclock_inst是隐式连续赋值。因此,line 1和与 和(放置在)line 2上的分配发生冲突,导致一个变量中出现多驱动程序问题。minutehourline 3

但是,为了检查我的结论,我修改了代码,如下所示。

//revised code for "design.sv"

module clock(
  input clk, rstn,
  output reg[6:0] minute, 
  output reg[5:0] hour
);

  
  initial begin        // newly added block
    minute = 0; hour = 0;
  end
  
  always @ (posedge clk, negedge rstn) begin
    if(!rstn) begin
        minute <= 0; hour = 0;
        end 
    else begin
        minute = minute + 1;
        end
  end
  
  always @ (posedge clk) begin
    if((minute%60==0)&&(minute != 0)) begin
        minute <= 0;
        hour = hour + 1;
        end
    
    if((hour%24==0)&&(hour !=0)) hour <= 0;
  end
  
  
endmodule

//revised code for "testbench.sv"

module test;
  reg clk, rstn;
  reg [6:0] minute;
  reg [5:0] hour;
  
  initial begin
    clk = 0;
    forever #5 clk = ~clk;
  end
  
  initial begin
    rstn = 1;          //revised line
    #30 rstn = 0;
    #1 rstn = 1;
    #600 $finish;
  end
  
  clock clock_inst(clk, rstn, minute, hour);
  
  initial begin
    $dumpfiles("wave.vcd");
    $dumpvars(0, test);
  end
  
endmodule

我认为这些代码会给我带来错误,因为 on 的赋值newly added block会与output reg[6:0] minuteandoutput reg[5:0] hour赋值发生冲突。

但效果确实很好

VSIM:仿真已完成。不再需要模拟测试向量。

VSIM:仿真已完成。

现在,我无法在我的第一个代码中找到哪些行导致多重驱动错误。

verilog
  • 1 个回答
  • 35 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve