Questions tagged «modelsim»

6
串行协议定界/同步技术
由于异步串行通信甚至在当今的电子设备中也很普遍,我相信我们许多人会不时遇到这样的问题。考虑与串行线(RS-232或类似产品)连接并且需要连续交换信息的电子设备D和计算机。即每个发送一个命令帧,并每个发送一个状态报告/遥测帧答复(报告可以作为对请求的响应发送,也可以独立发送-在这里并不重要)。通信帧可以包含任何任意二进制数据。假设通信帧是固定长度的分组。PCPCX msDY ms 问题: 由于协议是连续的,因此接收方可能会失去同步,或者只是在进行中的发送帧中间“加入”,因此它只是不知道帧起始位置(SOF)在哪里。根据数据相对于SOF的位置,数据具有不同的含义,接收到的数据可能会永久损坏。 所需的解决方案 可靠的定界/同步方案可在恢复时间短的情况下检测SOF(即重新同步所需的时间不超过1帧)。 我了解(并使用了一些)的现有技术: 1)标头/校验和 -SOF作为预定义的字节值。帧末的校验和。 优点:简单。 缺点:不可靠。恢复时间未知。 2)字节填充: 优点:可靠,快速恢复,可与任何硬件一起使用 缺点:不适用于固定大小的基于帧的通信 3)第9位标记 -在每个字节之前附加一个位,而SOF标记为1和数据字节标记为0: 优点:可靠,快速恢复 缺点:需要硬件支持。大多数PC硬件和软件未直接支持。 4)第8位标记 -上面的一种模拟,同时使用第8位而不是第9位,每个数据字仅保留7位。 优点:可靠,快速的恢复,可与任何硬件一起使用。 缺点:需要从/到常规8位表示到/从7位表示的编码/解码方案。有点浪费。 5)基于超时 -假定SOF为某个已定义的空闲时间之后的第一个字节。 优点:无数据开销,简单。 缺点:不太可靠。在较差的计时系统(如Windows PC)上无法很好地工作。潜在的吞吐量开销。 问题: 还有哪些其他可能的技术/解决方案可以解决该问题?您能否指出上面列出的缺点,可以轻松解决这些缺点,从而消除它们?您(或您将)如何设计系统协议?
24 serial  communication  protocol  brushless-dc-motor  hall-effect  hdd  scr  flipflop  state-machines  pic  c  uart  gps  arduino  gsm  microcontroller  can  resonance  memory  microprocessor  verilog  modelsim  transistors  relay  voltage-regulator  switch-mode-power-supply  resistance  bluetooth  emc  fcc  microcontroller  atmel  flash  microcontroller  pic  c  stm32  interrupts  freertos  oscilloscope  arduino  esp8266  pcb-assembly  microcontroller  uart  level  arduino  transistors  amplifier  audio  transistors  diodes  spice  ltspice  schmitt-trigger  voltage  digital-logic  microprocessor  clock-speed  overclocking  filter  passive-networks  arduino  mosfet  control  12v  switching  temperature  light  luminous-flux  photometry  circuit-analysis  integrated-circuit  memory  pwm  simulation  behavioral-source  usb  serial  rs232  converter  diy  energia  diodes  7segmentdisplay  keypad  pcb-design  schematics  fuses  fuse-holders  radio  transmitter  power-supply  voltage  multimeter  tools  control  servo  avr  adc  uc3  identification  wire  port  not-gate  dc-motor  microcontroller  c  spi  voltage-regulator  microcontroller  sensor  c  i2c  conversion  microcontroller  low-battery  arduino  resistors  voltage-divider  lipo  pic  microchip  gpio  remappable-pins  peripheral-pin-select  soldering  flux  cleaning  sampling  filter  noise  computers  interference  power-supply  switch-mode-power-supply  efficiency  lm78xx 

1
如何在ModelSIM中调试红色信号?
我必须设计一个状态机,仅将NAND门用于组合部分,将D触发器用于顺序逻辑。一切都应以1GHz / 53的时钟频率运行。 现在,在您以“我们不会为您做功课”殴打我之前,让我告诉您,我花了几天的工作就报废了所有东西,然后又开始更严格地做所有事情。我想自己做,但是在项目的最简单部分中,我不断收到随机的,未定义的信号,这令人沮丧。 好的,首先,我有下图所示的状态机和真值表: 接下来是kmap: 由于对于D个触发器D = Q +,组合逻辑的布线(一旦将其构建到简化的块中)应该不会太难。 但是我的第一个问题出现在Q3 +的测试台上。为了简化信息,我在这里放一个我为Q3 +放在一起的快速图表: 在后面的文章中,您将看到在VHDL中,我实际上将输入in1Q3plus命名为in11Q3plus(11个输入),因为这不是最后一个块(最终的组合逻辑块由四个Q3 +,Q2 +,Q1 +,Q0 +块组成发出信号)。 因此,我必须使用NAND门来制作所有东西,这意味着我必须采用结构化方法。每个门基本上都基于NAND门,然后会增加复杂性(但是从AND门结构上只能写入AND,OR和NOT门)。然后,我有一个具有3个输入的“或”门,一个具有3个输入的“与”门和具有5个输入的“或”门(类似于逻辑图示例),每一个都基于先前的2个输入“与与”门。 直到Q3plus的每个测试台(上图)都可以工作。我的测试过程是为每个输入生成信号,以便可以在“模拟”窗口中方便地观看信号。例如,对于3输入与门,我具有以下信号: process begin a1 <= '0' ; wait for 4ns; a1 <= '1' ; wait for 4ns; end process; process begin b1 <= '0' ; wait for 8ns; b1 <= '1' …

2
您能否将Modelsim测试平台与外部刺激相连接
我正在一个同时进行驱动程序软件和FPGA开发的团队中工作。FPGA仿真是在Modelsim中完成的,而驱动程序软件则是用C语言编写的。为了最大程度地降低集成风险,我希望能够在将产品两半投入硬件之前对其进行建模。 我知道Modelsim支持一个测试平台,该平台可以让您以文本文件的形式提供刺激,并带有输入的时间和值。我想知道Modelsim是否具有一种模式,该模式可以让您将管道连接到外部应用程序(例如我们的驱动程序),并运行某种分布式模拟,其中软件可以将值推入测试台,然后稍后观察结果。 我无法使用文本文件输入完成的技巧是使产品的两半相互作用。我需要让软件将值“写入”到FPGA模拟器中,读取结果,然后将新值写入到FPGA中,这取决于读取的结果。文本文件要求输入独立于输出。 我已经在StackExchange和google上进行了搜索,但是我无法提供一组关键字来缩小搜索范围,从而无法确定我要寻找的行为,或者确定它不存在。

2
PIC12F675 GP4不起作用
我正在为一个项目使用PIC12F675,除一件事情外,其他所有东西都工作正常。GP4不能用作数字IO。我已经看了很多配置和代码,但是找不到任何东西。 配置: #pragma config FOSC = INTRCCLK #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config BOREN = ON #pragma config CP = OFF #pragma config CPD = OFF 码: #include <xc.h> #include <math.h> #include "config.h" #define _XTAL_FREQ 4000000 void delay(unsigned int …
9 pic  c  embedded  programming  audio  oscillator  spark  dc-dc-converter  boost  charge-pump  eagle  analog  battery-charging  failure  humidity  hard-drive  power-supply  battery-charging  charger  solar-energy  solar-charge-controller  pcb  eagle  arduino  voltage  power-supply  usb  charger  power-delivery  resistors  led-strip  series  usb  bootloader  transceiver  digital-logic  integrated-circuit  ram  transistors  led  raspberry-pi  driver  altium  usb  transceiver  piezoelectricity  adc  psoc  arduino  analog  pwm  raspberry-pi  converter  transformer  switch-mode-power-supply  power-electronics  dc-dc-converter  phase-shift  analog  comparator  phototransistor  safety  grounding  current  circuit-protection  rcd  batteries  current  battery-operated  power-consumption  power-electronics  bridge-rectifier  full-bridge  ethernet  resistance  mosfet  ltspice  mosfet-driver  ftdi  synchronous  fifo  microcontroller  avr  atmega  atmega328p  verilog  error  modelsim  power-supply  solar-cell  usb-pd  i2c  uart 

1
为什么移位寄存器的这种简单VHDL模式无法按预期工作
乍一看,您会期望下面的VHDL源代码充当移位寄存器。在那个q中,随着时间的流逝, "UUUU0", "UUU00", "UU000", "U0000", "00000", .... 但是它总是U在五个(或更多)连续时钟周期之后。 为什么是这样? 该代码实际上是复杂得多的模拟的简化版本。但这证明了我看到的症状。 它在ModelSim和ActiveHDL下的仿真过程中都显示出这一有趣且出乎意料的结果,我没有尝试过其他仿真器,并且(第二个原因的解释)想知道其他程序是否以相同的方式运行。 要正确回答此问题,您必须了解: 我知道这不是实现移位寄存器的最佳方法 我知道对于RTL综合,应该重新设置。 我知道std_logic的数组是std_logic_vector。 我知道聚合运算符&。 我还发现了: 如果将分配temp(0)<='0';移到流程中,则它将起作用。 如果循环已展开(请参见注释的代码),则它将起作用。 我要重申的是,这是一个更为复杂的设计(用于流水线CPU)的非常简化的版本,被配置为纯粹显示意外的仿真结果。实际信号类型只是一种简化。因此,您必须按照原样考虑代码中的答案。 我的猜测是,VHDL仿真引擎的优化器错误地(或按照规范)没有费心地在循环内运行表达式,因为没有外部变化的信号,尽管我可以通过将展开的循环置于循环中来证明这一点。 因此,我希望这个问题的答案更多地与模糊VHDL语法的VHDL仿真标准以及VHDL仿真引擎如何进行优化有关,而不是是否给出代码示例是完成某件事的最佳方法。 现在我要模拟的代码: library ieee; use ieee.std_logic_1164.all; entity test_simple is port ( clk : in std_logic; q : out std_logic ); end entity; architecture example of test_simple is type t_temp …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.