众所周知,在Linux中禁用逻辑CPU的方法基本上是这样的echo > 0 /sys/devices/system/cpu/cpu<number>/online.这样,您只是告诉操作系统忽略给定的(<number>)CPU.
我的问题更进一步,是否有可能不仅忽略它而是以编程方式将其关闭?我希望CPU不接收任何电源,以使其能耗为零.
我知道可以从BIOS中禁用内核(并非总是如此),但我想知道是否可以在某个程序中执行此操作.
我应该如何在测试平台中创建时钟?我已经找到了一个答案,但是有关堆栈溢出的其他人已经建议有其他或更好的方法来实现这一点:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY test_tb IS
END test_tb;
ARCHITECTURE behavior OF test_tb IS
COMPONENT test
PORT(clk : IN std_logic;)
END COMPONENT;
signal clk : std_logic := '0';
constant clk_period : time := 1 ns;
BEGIN
uut: test PORT MAP (clk => clk);
-- Clock process definitions( clock with 50% duty cycle is generated here.
clk_process :process
begin
clk <= '0';
wait for clk_period/2; --for 0.5 ns signal is '0'.
clk <= '1';
wait for clk_period/2; --for next 0.5 …Run Code Online (Sandbox Code Playgroud) 我们假设我必须在std_logic_vector上测试不同的位.实现一个单独的进程,每个位的for循环或者使用for-generate来实例化'n'进程,每个进程测试一位是不是更好?
FOR-LOOP
my_process: process(clk, reset) begin
if rising_edge (clk) then
if reset = '1' then
--init stuff
else
for_loop: for i in 0 to n loop
test_array_bit(i);
end loop;
end if;
end if;
end process;
Run Code Online (Sandbox Code Playgroud)
FOR-GENERATE
for_generate: for i in 0 to n generate begin
my_process: process(clk, reset) begin
if rising_edge (clk) then
if reset = '1' then
--init stuff
else
test_array_bit(i);
end if;
end if;
end process;
end generate;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,对FPGA和ASIC实施会产生什么影响?CAD工具可以轻松应对什么?
编辑:只是添加我给一个帮助人的回复,让我的问题更清楚:
例如,当我在ISE上使用for循环运行一段代码时,综合摘要给了我一个公平的结果,花了很长时间来计算所有内容.当我重新编写我的设计时,这次使用for-generate和几个进程,我使用了更多的区域,但是该工具能够更快地计算所有内容,并且我的计时结果也更好.那么,它是否意味着一个规则,总是更好地使用for-generate,需要额外的面积和更低的复杂性,或者是我必须验证每一个实现可能性的情况之一?
我正在开发的一些软件需要USB设备(我作为SerialPort与USB-to-UART桥接器进行交互).
有时,在计算机从休眠状态重新启动后,设备未被检测到,我无法再通过其串行端口向设备写入或读取设备.必须具有对设备的读/写访问权限.
我不能依赖用户采取任何行动(物理或其他),所以我需要一种方法以编程方式重启设备.
我应该如何使用.NET框架以编程方式在Windows XP/Vista/7中重新启动USB设备?
我想用仅使用USB端口用C#控制LED.我不想用USB连接任何其他设备.我只想将LED直接连接到USB端口引脚并对其进行编程(闪烁等).我怎样才能做到这一点?我是硬件编程的新手,它将是我的第一个程序.
编辑:我可以printer port通过将一个LED 引脚连接到data pin另一个引脚来实现它(闪烁LED)ground.我怎么能用USB端口做同样的事情?我的主板没有打印机端口.USB是唯一的选择.
好的,所以我之前打开了usb驱动器,我明白他们使用通用MCU来控制NAND闪存.我在想的是,如果有人可以重新编程它们,在插入USB端口时启动应用程序,那么它对于大量应用程序(例如自动复制文件)可能很有用.我知道不同的MCU可能会/可能不会使用完全不同的ASM代码,但也存在如何与其进行通信的问题(即协议等).这有可能吗?我听说过像MP Tools这样的东西(理论上)可以低级格式化并将驱动器重置为出厂默认值,但不能编辑其上使用的任何代码.
我是一名物理学家,几个星期前我有一个启示,关于我如何能够使用我的个人电脑来更好地控制实验室实验,而不是通常的情况.在我试图尝试这一点之前,我想在这些问题上与那些拥有比我更多专业知识的人一起检查可行性.
我们的想法是在计算机上使用i/o端口--- VGA,以太网,扬声器插孔等,直接与实验装置中的传感器和执行器通信.例如,打开以太网电缆的一侧(另一端连接到计算机)并将每条线路发送到不同的设备.我认识一个博士后使用BeagleBone做了非常相似的事情.他写了一些汇编代码,让他用内部时钟同步所有内容,并使用GPIO引脚有效地为他提供了一个完全可编程的混合信号发生器/示波器.使用笔记本电脑似乎应该可以做到同样的事情,这将有额外的好处,你可以从同一设备进行数据分析.
我预见的主要潜在困难是BeagleBone上的硬件设计时考虑到了这种i/o,而我预计笔记本电脑上的硬件可能更难直接控制.我知道(例如,从一些初步调查,http://ask.metafilter.com/125812/Simple-USB-control-how-to-blink-an-LED-via-code)USB端口将难以访问这样,VGA就是(根据VGA 15针端口数据使用Matlab读写)是不可能的.但是,我还没有找到任何关于使用其他端口的信息,如以太网或扬声器插孔.
所以主要的问题是:这个想法是否可行(没有为硬件的每个新变化投入数月),如果是这样,那么什么类型的i/o(以太网,扬声器插孔等)可能是最好的选择?
辅助问题是:
我在哪里可以找到材料来了解我如何执行此计划?我甚至不确定要在Google上插入哪些关键字.
我可以轻松地做到这一点取决于操作系统或硬件品牌吗?
我目前正在使用 Yocto Linux 构建并尝试与 FPGA 上的硬件块连接。这块是模仿一张带有FAT16文件系统的SD卡;包含单个文件 (cam.raw)。这个文件代表了FPGA和linux系统之间的共享内存空间。因此,我希望能够将数据从 linux 系统写入该内存并取回 FPGA 可能做出的任何更改(目前,FPGA 只是从内存空间中获取部分数据,并将 6 32 位字,就像我写 0x40302010 一样,如果我读回数据,应该返回 0x40302016)。但是,由于某处存在缓存,虽然我可以将数据写入 FPGA,但我无法立即取回结果。
我目前正在做这样的事情(使用 python 因为它很容易):
% mount /dev/mmcblk1 /memstick
% python
>> import mmap
>> import os
>> f = os.open("/memstick/cam.raw", os.O_RDWR | os.O_DIRECT)
>> m = mmap.mmap(f, 0)
>> for i in xrange(1024):
... m[i] = chr(i % 256)
...
>> m.flush() # Make sure data goes from linux to FPGA
>> hex(ord(m[0])) # Should be 0x6
'0x0'
Run Code Online (Sandbox Code Playgroud)
我可以用 dd 确认数据已更改(尽管我也经常遇到缓冲问题)并使用 FPGA(SignalTap/ChipScope)工具我确实得到了正确答案(即第一个 …
第 1 部分:
我总是被告知使用 Verilog 中的函数来避免代码重复。但是我不能用模块来做到这一点吗?如果我的理解是正确的,除了不能从 always 块内部实例化模块之外,所有函数都可以在 Verilog 中重写为模块。除了在这种情况下,我总是可以坚持使用模块。我对么?
第 2 部分:
如果我是对的,为什么 Verilog 编译器不能以模块得到函数处理的方式编写?我的意思是,为什么编译器不能允许程序员在 n 块内实例化一个模块并停止支持函数?
除了Arduino之外,还有哪些方法可以亲自学习硬件编程?是否有任何漂亮的工具包,既可以是预先组装好的机器人,也可以按照某种方式进行编程,或做某些事情,或类似的事情?