小编Mar*_*son的帖子

浮点单元的测试向量

我在Verilog中设计了一个32位单精度浮点乘法器和一个单独的加/减单元.

我在MATLAB中编写了一个脚本,它生成了一堆随机浮点数,并在Verilog中生成了一个测试平台.

我比较从ncverilog模拟那些从MATLAB的结果,并证实了我的倍增器工作正常,我的加/减正常工作为好.

但是,我想知道一个测试用例的列表,它会对我的浮点单元进行压力测试.有这样的清单吗?我知道像Softfloat一些节目,但测试的计算机的浮点运算,而不是能够合并与一个Verilog的测试平台.

我还应该提到我的单元不支持溢出,下溢等异常,并且不支持非规范化值.舍入模式是舍入到最近的.

谢谢!

floating-point verification

6
推荐指数
1
解决办法
1657
查看次数

当多个句柄同时发出信号时,WaitForMultipleObjects的行为

给定:我用自动重置事件填充一个句柄数组,并将其传递给具有bWaitAll = FALSE的WaitForMultipleObjects.

从MSDN:"当bWaitAll为FALSE时,此函数按顺序检查数组中的句柄,从索引0开始,直到其中一个对象发出信号.如果多个对象变为信号,则该函数返回其对象被发信号通知的数组中第一个句柄的索引."

所以,现在如果多个对象发出信号,我将获得第一个的索引.我是否必须通过我的阵列循环以查看是否有其他人发出信号?

现在我有一个循环:

For ( ; ; )
{
WaitForMultipleObjects(…)
If  (not failed)
     Process object that called. 
     Remove the handle that signaled from the array.
     Compact the arrary.
}
Run Code Online (Sandbox Code Playgroud)

events winapi multithreading

5
推荐指数
2
解决办法
8969
查看次数

ARM皮质:使用位带的互斥锁

鉴于此,在ARM Cortex M3上,我可以:

  • 原子地读取一个位
  • 原子地设置一个位
  • 原子地清除一点

如何将这些组合用于互斥体式操作集:

try lock
take lock
release lock
Run Code Online (Sandbox Code Playgroud)

似乎try_lock或者take_lock需要两个不是原子的操作.

我需要更多控制才能实现这一目标吗?禁用全局中断会这样做,但似乎应该有更多的手术方法.

embedded mutex arm cortex-m3

5
推荐指数
1
解决办法
5126
查看次数

翻转与元稳定性之间的关系

在进行时钟域转换(速率匹配)时,我们通常会翻转数据以避免元稳定状态.双重翻转只会降低元稳定性的可能性.三次翻转将进一步减少它.

如何计算元稳定性和使用的时钟域触发器数之间的概率/关系?

fpga asic

5
推荐指数
1
解决办法
330
查看次数

如果声明VHDL

有人可以解释为什么编写VHDL时的黄金法则是if-then-else语句必须在一个进程中.是因为在流程中,语句是按顺序执行的,而在外部则不是.

hardware if-statement vhdl

5
推荐指数
2
解决办法
1万
查看次数

如何通过枚举索引std_logic_vector

我有一个像这样的std_logic_vector:

cntrl_signals:out std_logic_vector(4 downto 0);
Run Code Online (Sandbox Code Playgroud)

为此向量提供索引的一种方法是为每个向量显式定义一个常量.

constant CLK_SIG:integer := 0;
constant EN_SIG:integer := 1;
constant FOO_SIG:integer := 2;
constant BAR_SIG:integer := 3;
constant BAZ_SIG:integer := 4;
Run Code Online (Sandbox Code Playgroud)

我们的想法是使用它们来索引矢量.

cntrl_signals <= (CLK_SIG=>1,EN_SIG=>1,others=>0);
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有一种很好的速记方式来声明索引(比如C中的枚举)?

vhdl

5
推荐指数
1
解决办法
7076
查看次数

使用接口宽度和$ size自动调整SystemVerilog的大小?

我正在尝试使用SystemVerilog中的标准化存储器接口制作一个模块(在我的情况下是一个DSP),并希望模块中的变量根据所连接接口中的总线宽度自动调整大小.我的理由:这使得代码更容易移植,允许它自动调整到任何连接的接口,而不是要求HDL编码器传递参数,告诉模块将连接到它的所有接口总线的宽度(不是这将是可怕的,没有参数,它似乎更清洁).

但是,我似乎无法让它工作.这是一个说明问题的例子; 以下在Quartus II 12.1中进行综合:

// Top level module with some 15-bit ports

module top  ( input [14:0] data_in,
              output [14:0] data_out1, data_out2,
                            data_out3, data_out4 );

   test_interface my_interface(); // Initialize the interface
   test_module my_module(.*);     // Initialize & connect module 
endmodule

// Define a simple interface:

interface test_interface ();
   logic [8:0] my_port;
endinterface

// Define the module:

module test_module ( input [14:0] data_in,
                     test_interface my_interface,
                     output [14:0] data_out1, data_out2,
                                   data_out3, data_out4 );

   localparam width1 = $size(data_in);              // should be 15
   localparam …
Run Code Online (Sandbox Code Playgroud)

size interface parameterized system-verilog

5
推荐指数
1
解决办法
6985
查看次数

在VHDL中.....如何计算向量的前导零?

我在VHDL项目中工作,我面临着计算向量长度的问题.我知道有一个矢量的长度属性,但这不是我正在寻找的长度.例如,我有std_logic_vector

    E : std_logic_vector(7 downto 0);  
Run Code Online (Sandbox Code Playgroud)

然后

    E <= "00011010";
Run Code Online (Sandbox Code Playgroud)

所以,len = E'length = 8但我不是在寻找这个.我想len在丢弃最左边的零后计算,所以len = 5;

我知道我可以通过从左到右检查"0"位来使用for循环,如果出现"1"位则停止.但这并不高效,因为我有1024或更多位,这将减慢我的电路.那么有没有任何方法或算法以有效的方式计算长度?例如使用log(n)级门的组合门,(其中n =比特数).

fpga vhdl

5
推荐指数
1
解决办法
5783
查看次数

将Modelsim模拟时间瞬间作为字符串变量?

我知道在使用时report,severityModelsim会将模拟时刻作为其消息的一部分显示给控制台.无论如何,这个时刻作为一个字符串变量"获取",所以我可以用这个"时间"字符串打印我自己的消息?

vhdl

5
推荐指数
1
解决办法
1万
查看次数

在cuda中漂浮与int

在CUDA中使用float而不是使用intCUDA 会更好吗?

做了float降低银行的冲突和确保合并?(或者它与此无关?)

cuda

4
推荐指数
1
解决办法
5787
查看次数