我正在寻找一种方法,将我用C语言编写的软件应用程序中的一些数据发送到Zynq的AXI-Stream接口.就像是
open(/dev/axistream);
send_data(data);
Run Code Online (Sandbox Code Playgroud)
我在Arm部分运行Linux,现在我想将它连接到可编程逻辑部分.
我正在设计一个基于xilinx fpga上的microblaze微处理器的微控制器.大多数硬件设置已完成.此时我正在更新的是在微型光盘上运行的c代码.在XPS中是否有办法不必重建整个项目,只需要c代码部分.重建整个项目大约需要20分钟 - 如果我没有必要的话会很好.谢谢.
导致问题的代码看起来像普通的xnor操作,如下所示:
S(1) <= L(16) xnor L(26);
Run Code Online (Sandbox Code Playgroud)
此行导致以下错误:
ncvhdl_p: *E,EXPSMI (HDL/aes_sbox_enc_depth16.vhd,169|14): expecting a semicolon (';') [9.5.1].
ncvhdl_p: *F,MAXERR: maximum error count reached (1).
TOOL: ncvhdl 10.20-s075: Exiting on Feb 14, 2012 at 12:56:05 GMT (total: 00:00:01)
Run Code Online (Sandbox Code Playgroud)
任何人都知道这里出了什么问题,分号显然在那里.是否有可能VHDL不支持xnor,如果是这样,我该如何重写它?
非常感谢!
如何打印存储在声明为的8位寄存器中的有符号整数值
reg [7:0] acc;
运用
$ display("acc:%d",acc)
它打印无符号值.
什么是$ display函数的正确语法?
我有一个利用同步复位的fpga设计(由于其他地方讨论的原因,我更喜欢同步复位到异步).我在设计中有四个不同的时钟域,我利用一个按钮来产生我的复位信号,这当然是完全异步的(保存我的手指).我在四个时钟域中的每一个中去抖按钮信号,以从单个源生成四个域的同步复位.我的去抖模块基本上计算了被置位的复位按钮的N个时钟周期.如果复位断言超过N个周期,则生成复位信号(此模块的代码粘贴在下面).
第一个问题 - 有没有比这种方法更好的方法来产生重置?
第二个(更有趣的问题):当我查看时序报告(使用xilinx工具)时,我发现一致的限制信号都与模块有关.例如,限制路径是从复位发生器(去抖动器)到某个状态机的状态寄存器.复位信号的扇出非常高(它们触及各自时钟域中的所有内容).虽然我的速度受到重置的限制,但我有点惊讶.我发现我只限于8.5 nS,其中~50%是路由,其中约50%是逻辑.关于如何做得更好的任何建议?你如何处理fpga设计中的同步复位生成?
这是重置生成的代码.注意,信号复位信号类似于去抖动输出(例如,当我实例化模块时,debounced
输出是该特定时钟域的复位).
module button_debouncer(/*AUTOARG*/
// Outputs
debounced,
// Inputs
clk, button
);
/* Parameters */
parameter WIDTH = 1;
parameter NUM_CLKS_HIGH = 12000000;
parameter log2_NUM_CLKS = 24;
/* Inputs */
input clk;
input [WIDTH-1:0] button;
/* Outputs */
output [WIDTH-1:0] debounced;
/* Regs and Wires */
reg [WIDTH-1:0] b1, b2;
reg [log2_NUM_CLKS-1:0] counter;
/* Synched to clock domain */
always @(posedge clk) begin
b1 <= button;
b2 <= b1;
end
/* Debounce the …
Run Code Online (Sandbox Code Playgroud) 据我所知,以下代码正确地进行了合成和模拟,但XST仍然发出以下警告: value(s) does not match array range, simulation mismatch.
是否有我遗漏的东西?
使用的工具:Xilinx ISE项目导航器(合成器:XST)FPGA:SPARTAN 3E
module error_example(
input [47:0] data,
input [2:0] sel,
output [5:0] data_out
);
assign data_out = data[sel*6 +: 6];
endmodule
Run Code Online (Sandbox Code Playgroud)
WARNING:Xst:790 - "error_example.v" line 8: Index value(s) does not match array range, simulation mismatch.
就像我说的,这是有效的,我已经完成了数学运算:
sel
可以有0到7之间的值,
if sel
为0,那么data_out = data[5:0]
......
如果sel
是7,那么data_out = data[47:42]
我应该在这里做些不同的事吗?这是XST中的错误吗?
在调试Vivado中用户定义的物理类型的处理时(更多内容),我发现了从真实到整数的类型转换的不同行为.
这是我的示例代码:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.MATH_REAL.all;
entity Top_PhysicalTest_Simple is
port (
Clock : in STD_LOGIC;
Input : in STD_LOGIC;
Output : out STD_LOGIC
);
end;
architecture top of Top_PhysicalTest_Simple is
constant int_1 : INTEGER := natural(0.5);
constant int_2 : INTEGER := integer(-0.5);
-- constant int_2 : INTEGER := natural(-0.5);
begin
assert FALSE report "16 - int_1 (natural(0.5)): " & INTEGER'image(int_1) severity note;
assert FALSE report "17 - int_2 (natural(-0.5)): " & INTEGER'image(int_2) severity note;
Output <= …
Run Code Online (Sandbox Code Playgroud) 我的freeRTOS目前正在使用Microzed板.我使用Xilinx SDK作为软件平台,直到现在我已经能够创建任务并分配优先级.
我只是想知道是否可以为我的每个任务分配一个固定的时间,例如在100毫秒后我的调度程序将切换到下一个任务.那么我可以为每个任务设置一个固定的执行时间吗?据我检查,我找不到一种方法来解决这个问题,如果有任何方法可以使用freeRTOS的实用程序来实现这一点,请让我知道伙伴们.
我将 Xilinx 的 ISE 安装到我的 Windows PC 上,结果非常糟糕。它不起作用,因为当我尝试运行它时,出现下一条消息显然Warning: VC++ 2008 runtime libraries are not installed. Please install the runtime libraries by running the redistributable {Install Root Dir}\common\bin\nt64\vcredist_x64.exe from the installed area. You will need to have adminstrative privilege to run VC++ 2008 Redistributable.
我进入了目录,以管理身份运行,修复了 C++ 库,但没有任何变化,它仍然无法打开。