问题标签 [hdl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
embedded - 在 Verilog 中驱动双向线路
这个问题可能不会很好地解释,那是因为我真的不明白我的设计中发生了什么。
我需要使用 I2C 通信总线与相机(Terasic D5M)通信,所以我尝试使用 Verilog 编写一个。我只需要一个大师。在我的逻辑分析仪上,一切看起来都很棒,除了我不断从相机收到 NACK 信号。最初我不知道出了什么问题,所以我把它放在一边。
今晚我尝试使用具有 D5M 模块的 Altera 大学 IP 内核。将其设置为自动初始化后,我观察了分析仪上发生的情况。跟踪看起来与我的 I2C 模块的输出相同,但这是设备注册的 ACK。
我的问题是,我一生都无法弄清楚为什么我没有得到认可。可能是我不允许相机将 sda 线拉低(scl 工作正常),但我不知道为什么会这样。
有没有人有类似的经历或知道我应该去哪里看/发帖/阅读?我会发布一些代码,但如果不是完整的,我不知道它会有多大用处。很抱歉这么含糊,但我真的很迷茫,甚至不知道我应该问什么;我想这是一个类似的效果请求。感谢您的帮助,这是 i2c 模块的输出行的一些代码。
pSCL 是以所需速率运行的时钟,sda_bit 是运行期间 sda 线的值。这是释放和等待确认的部分。这嵌入在我的转换状态中,因此是 else if 的开始。
我认为释放 ena_sda 足以让相机驱动模块。我想我之前把 sda_bit = HIGH 作为测试(我一个月没看过这个)。
我很乐意分享更多代码或显示我的逻辑跟踪,但我不想再把它弄乱了。谢谢阅读。
syntax - VHDL 中的语法错误
我正在尝试使用结构化 VHDL 和组件来实现一位计数器。尝试执行端口映射时出现语法错误。错误是“错误(10028):无法在Assign4.vhd(47)处为网络“P”解析多个常量驱动程序”这是我到目前为止的内容:提前感谢您的任何想法。
hardware - “简单”的 VHDL 模块的设计仍然让我抓狂
感谢您的所有意见,我实施了您的建议,但问题仍然存在。模拟结果工作正常,但硬件输出不同。简单回顾一下,我有两个 ctrl 信号来确定实体的行为:
这是VHDL代码:
测试程序
如您所见,第一个 SH1_L 操作的最后一位是错误的。第一个 SH1_L 操作为 NEXT SH1_L 操作产生一个进位,因为 MSB 设置为输入之一,但是,在当前 SH1_L 操作中似乎已经考虑了这个进位,这是错误的(tx 应该为零)。我检查了综合报告,没有闩锁,所以我有点无能为力,几乎绝望了这里出了什么问题。我使用 Xilinx ISE 12.1 进行综合,是否会因为我的架构中没有复位信号而导致实例化了错误类型的锁存器?
非常感谢您提供更多有用的意见来解决此问题,Patrick
syntax - 提供多个架构的目的?
我正在学习 VHDL,我正在尝试从示例、语法指南和实验中学习。
我不太明白的一件事是为什么您要提供不止一种架构。例如,这个示例 MUX 代码:
它是有目的的,还是只是为了举例?
另外,不确定这是属于这里还是属于 Electronics.SE,所以我想先在这里尝试。
c - 程序段的最小化——如果,否则
X、Y、Z、T 是不同的工作。例如,X = 多路复用器(...)
编辑:emptyA 是数字 1 或 0,A 是集合 { 1, 2, 3, 4 } 的成员
如何重写该程序段以获得最小的比较成本
verilog - 不是有效的左值 - verilog 编译器错误
当我编译时,编译器给了我;
我该如何解决? 为什么它给出错误?
编辑:我已经解决了问题;
我将使用 if 和 else 结构,并用 1'b1*/ 调用相应的实例
verilog - ? 时间延迟,当使用 === 或 <=
当我们使用
对于那些操作“ === 和 <= ”,是否发生了任何时间延迟?
编辑:我认为像 1 单位时间这样的小东西,我错了吗?
使用语言:verilog
vhdl - 优化 fpga 实现的流水线吞吐量的最佳实践是什么?
例如,如何充分利用重定时和/或 c-slow 来充分利用给定的管道。
通过重定时,一些模块通过将移位寄存器放在输入上(前向寄存器平衡)获得更好的结果,而其他模块在输出上使用移位寄存器(后向寄存器平衡)做得更好。
现在我使用以下方法:
- 代码 hdl(在 verilog 中)
- 为特定模块创建时序约束
- 合成、映射、布局和路由(使用 ISE 13.1)
- 查看待改进模块的布局布线时序,以及最大逻辑电平数。
- 取这个数量的逻辑电平,并对要插入的触发器的数量进行有根据的猜测。
- 插入触发器,启用寄存器平衡,希望最好
就目前而言,这种方法是命中注定的。有时它会得到很好的结果,有时它是垃圾。那么,有什么好的方法可以提高这种重定时的成功率呢?
有什么工具可以帮助解决这个问题吗?此外,链接、论文和书籍推荐将不胜感激。
constants - 如何在verilog中使用const
而不是使用
我要使用
或者同样的事情
我可以在 verilog 中实现这个愿望吗?
verilog - 在工作之前等待posedge clk? - 如何
标有 (i) 的行,我想在将 outp 发送到输出端口之前等待 posedge clk。但是,当我尝试过类似 ;
它给出了错误
它给出了荒谬的答案/模拟输出。 在发送输出之前,我应该把什么东西放在那条线上等待 posedge clk ?