小编dav*_*od2的帖子

如果在for循环中vs continue语句

for在Matlab中有一个循环,for循环中的所有代码都包含在一个if语句中.例如 :

for p = 1:length(array)
    if array(p) == 1 %// Test positive for condition    
        %// Generic code here that
        %// Only executes if p == 1 
    end;                  
end; 
Run Code Online (Sandbox Code Playgroud)

使用if语句测试相等性是否更快,如果为true则执行内部代码,或者,测试不等式然后使用continue语句,例如:

for p = 1:length(array)
    if array(p) ~= 1 %// Test negative for condition
        continue;   %// Skip if negative
    end;   
    %// Generic code here that
    %// Only executes if p == 1
end; 
Run Code Online (Sandbox Code Playgroud)

或者,这两种方式都没有区别,即它在执行时优化到相同的结果?

由于其唯一的微观优化并不是非常重要 - 但我很想知道!

编辑:有趣的是,剖析推荐的代码之后,后者似乎是分数更快-是否有人会关心解释,将是巨大的!(毕竟,它充其量只是相同的逻辑,但需要执行额外的指令)

performance matlab for-loop if-statement

17
推荐指数
1
解决办法
761
查看次数

带参数的单例模式对象

我正在尝试创建一个C++单例模式对象,使用引用而不是指针,其中构造函数采用2个参数

我已经看过的示例代码的整个主机,其中包括: 在C++单例模式, C++ Singleton设计模式C++单例设计图案

我相信我理解所涉及的原则,但尽管试图几乎直接从示例中提取代码片段,但我无法将其编译.为什么不 - 以及如何使用带参数的构造函数创建此单例模式对象?

我已将收到的错误放在代码注释中.

另外,我在ARMmbed在线编译器中编译这个程序 - 可能/可能没有c ++ 11,我目前正试图找出哪个.

Sensors.h

class Sensors
{
public:
     static Sensors& Instance(PinName lPin, PinName rPin); //Singleton instance creator - needs parameters for constructor I assume
private:
    Sensors(PinName lPin, PinName rPin); //Constructor with 2 object parameters
    Sensors(Sensors const&) = delete; //"Expects ;" - possibly c++11 needed?
    Sensors& operator= (Sensors const&) = delete; //"Expects ;"
};
Run Code Online (Sandbox Code Playgroud)

Sensors.cpp

#include "Sensors.h"
/**
* Constructor for sensor object - takes two object …
Run Code Online (Sandbox Code Playgroud)

c++ singleton design-patterns reference

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

在VHDL中创建低时钟频率的替代方法

在过去,我问了一个关于复位的问题,以及如何将高时钟频率分解为一系列较低时钟的方波频率,其中每个输出是彼此的谐波,例如第一个输出是10 Hz,第二个是20 Hz等等

我收到了几个非常有用的答案,建议使用时钟使能引脚创建较低频率的惯例.

我发生了另一种选择; 使用不断递增的位数,并将该数字的最后x位作为时钟输出,其中x是输出的数量.

它在我的综合中起作用 - 但我很想知道 - 因为我从未在网上或在SO上提到它,我错过了一些意味着它实际上是一个糟糕的想法,我只是为了以后创造问题?

我知道对此的限制是我只能产生输入频率除以2的幂的频率,所以大部分时间它只能接近所需的输出频率(但仍然是正确的)订购).这种限制是不推荐的唯一原因吗?

非常感谢!

大卫

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
library UNISIM;
use UNISIM.VComponents.all;
use IEEE.math_real.all;

ENTITY CLK_DIVIDER IS
    GENERIC(INPUT_FREQ : INTEGER;       --Can only divide the input frequency by a power a of 2 
            OUT1_FREQ  : INTEGER
    );
    PORT(SYSCLK  : IN  STD_LOGIC;
         RESET_N : IN  STD_LOGIC;
         OUT1    : OUT STD_LOGIC;       --Actual divider is  2^(ceiling[log2(input/freq)])
         OUT2    : OUT STD_LOGIC);      --Actual output is input over value above
END CLK_DIVIDER;

architecture …
Run Code Online (Sandbox Code Playgroud)

spartan conventions clock vhdl xilinx-ise

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

VHDL 的 IEEE 库中可综合的固定/浮点

我正在创建一个 VHDL 项目(Xilinx ISE for Spartan-6),需要在定点/浮点中使用十进制“实型”数字(我希望定点就足够了)。

作为 VHDL 的新手,我发现非常困难的方法是real综合不支持非常量类型,所以我开始寻找 IP 核或库来解决这个问题。

到目前为止,我找到了 3 个选项;

1) Xilinx 提供的浮点 IP 核

2) David Bishop 编写的可下载的“ieee_proposed”库在这里找到

3) 在尝试解决如何“创建”一个包含 David Bishops 文件的新库的过程中花费了大量时间后,我快速浏览了默认IEEE库并看到它包含ieee.fixed_generic_pkgieee.fixed_pkg包。

我的问题是 - 在这两个库中 - 使用哪一个是明智的?一个适合合成而一个不适合,还是一个比另一个更老?然后如果提供了浮点,那么Xilinx提供的浮点IP核有没有真正的指向?

我已经浏览了许多试图添加库的人的问题ieee_proposed,但似乎没有人提到它们似乎已经存在于现有的IEEE.

非常感谢您的帮助!

============更新(基本上是我自己努力解决的)==================

我实际上无法使用ieee.fixed_pkg- 并且尝试这样做会给我错误Cannot find <fixed_pkg> in library <ieee>

在 C:\Xilinx\14.7\ISE_DS\ISE\vhdl\xst\nt 找到 ieee 库后,我发现它fixed_pkg实际上位于 ieee_proposed。但是,这仍然会引发相同的错误!

synthesis fixed-point vhdl ieee ieee-754

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

VHDL - "从不使用输入警告"

我用VHDL编写了一个程序(用于Xilinx Spartan-6),按下按钮时递增计数器,当按下另一个按钮时将其重置为零.

但是,我的进程会抛出WARNING:Xst:647 - Input is never used. This port will be preserved and left unconnected...重置变量的错误- 尽管事实上它既用于进程的灵敏度又用作条件(同样多button,但不会被标记!).

binary_proc : process(CLK_1Hz, button, reset) --include all inputs on sensitivity list
begin
    if rising_edge(CLK_1Hz) and button = '1' then
        binary <= binary + 1;
    else if reset = '1' then
            binary <= (others => '0');
        end if;
    end if;
end process;
Run Code Online (Sandbox Code Playgroud)

但更奇怪的是,我可以通过简单地使用两个if语句而不仅仅是if-else if语句来解决这个问题,如下所示;

binary_proc : process(CLK_1Hz, button, reset) --include all inputs on sensitivity list
begin
    if rising_edge(CLK_1Hz) and button …
Run Code Online (Sandbox Code Playgroud)

if-statement synthesis input vhdl xilinx

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

使用BUFG来驱动时钟负载

我正在尝试处理输出到DVI芯片的像素数据.使用各种时钟频率是因为DVI芯片寄存器是使用I2C编程的(因此需要时钟<500 KHz) - 来自时钟分频器.

DVI芯片需要一个40 MHz的差分像素时钟,然而,DVI每半个显示半个字节,因此每半个周期需要另外80 MHz的时钟将每一半像素推到数据线上,这些都是来自DCM.

这导致了各种各样的问题.我试图只使用双像素时钟速率交换像素的每一半,但是我得到了错误:

This design contains a global buffer instance, <out2_bufg>, driving the net, <pxlclk_p_int>, that is driving the following (first 30) non-clock load pins.

所以我在DCM的输出和使用信号的组件之间添加了一个BUFG元素 - 但它没有改变任何东西,而是现在在BUFG的输入和输出上抛出两次错误.

  • 我怎么能解决这个问题 - 因为我刚刚添加了一个BUFG并且它不喜欢它!

我的代码如下; 我试图删除与时钟无关的不相关的东西,但它仍然很长!

编辑1:我添加了块,当添加到系统时,导致错误(之前没有)它在第二个代码块中!我目前正在研究差分信号的其他建议,并在完成后再次编辑!

非常感谢,

大卫

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.VComponents.all;

ENTITY I2CBus IS
    PORT(
        SYSCLK_N   : IN    STD_LOGIC;   --system 200MHz differential clock
        SYSCLK_P   : IN    STD_LOGIC;
        BTN        : IN    STD_LOGIC;   -- to manually change reset

        LED        : OUT   STD_LOGIC_VECTOR(3 …
Run Code Online (Sandbox Code Playgroud)

buffer spartan clock vhdl xilinx-ise

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

导入具有相同名称的方法

所以我有两个单独的Python包,我将其导入到我的Raspberry Pi的Python脚本中.在这种情况下;

from rflib import*
from Rpi.GPIO import*
Run Code Online (Sandbox Code Playgroud)

但是,两个包都有自己独立的方法 cleanup(self)

因此,在脚本结束时,当我使用命令时,我 cleanup()如何a)知道方法来自哪个包(它们都完全不同的东西b)控制哪个包运行?

我查看了类似命名的问题,但它们似乎处理继承重载而不是包导入

python python-import

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

FPGA 系统中的同步与异步复位

我刚开始使用各种不同的模块创建 FPGA 系统来驱动 I2C 总线(尽管我认为这个问题适用于任何 FPGA 系统),并且所有模块都使用同步复位。

这些模块使用时钟分频器模块进行计时,该模块获取系统时钟并向系统的其余部分输出较低的频率。

我遇到的问题是,当复位信号变低时,时钟分频器复位,因此其他模块依赖的时钟停止 - 因此其他模块不会注册复位

一个明显的解决方案是进行异步复位,但是,在 Xilinx ISE 中,它似乎不喜欢它们,并抛出警告,指出这与 Spartan-6 FPGA 不兼容(特别是当异步代码之后的代码是同步代码时) ,这是因为 I2C 总线使用总线时钟将位放入总线上)。

另一种解决方案是时钟分频器根本不可重置,因此时钟永远不会停止并且所有模块都会正确重置。然而,这意味着时钟分频器寄存器无法初始化/重新初始化为已知状态 - 有人告诉我这将是一个大问题,尽管我知道您可以 := '0'/'1'; 在模拟中使用该运算符,但这一旦编程就不起作用实际的 FPGA(?)。

同步复位的约定是什么?时钟发生器一般不复位吗?或者它们仅在复位信号的瞬时边沿复位?或者我的建议都不是真正的解决方案!

我放入了时序图和代码来说明我的意思,并显示我一直在使用的代码。

非常感谢!

大卫

在此输入图像描述

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
library UNISIM;
use UNISIM.VComponents.all;
ENTITY CLK_DIVIDER IS
    GENERIC(INPUT_FREQ : INTEGER;
            OUT1_FREQ  : INTEGER;
            OUT2_FREQ  : INTEGER
    );
    PORT(SYSCLK  : IN  STD_LOGIC;
         RESET_N : IN  STD_LOGIC;
         OUT1    : OUT STD_LOGIC;
         OUT2    : OUT STD_LOGIC);
END CLK_DIVIDER;
architecture Behavioral of Clk_Divider is
    constant divider1 …
Run Code Online (Sandbox Code Playgroud)

asynchronous clock vhdl reset xilinx

0
推荐指数
1
解决办法
2921
查看次数