Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vhdl 国家知识产权局是如何运作的?_Vhdl_Modelsim - Fatal编程技术网

Vhdl 国家知识产权局是如何运作的?

Vhdl 国家知识产权局是如何运作的?,vhdl,modelsim,Vhdl,Modelsim,我正在制作一个UART收发器,在接收器部分,我需要一个SIPO将串行数据转换为并行数据,网络搜索抛出了一个实现所需功能的代码,我无法理解这个特定代码是如何工作的,谷歌搜索没有帮助。如果有人能指出这是如何工作的,我将不胜感激 library ieee; use ieee.std_logic_1164.all; entity RXN_CNTRL is port( reset : in std_logic; clk : in std_logic; din : in st

我正在制作一个UART收发器,在接收器部分,我需要一个SIPO将串行数据转换为并行数据,网络搜索抛出了一个实现所需功能的代码,我无法理解这个特定代码是如何工作的,谷歌搜索没有帮助。如果有人能指出这是如何工作的,我将不胜感激

library ieee;
use ieee.std_logic_1164.all;

entity RXN_CNTRL is 
  port(
    reset : in std_logic;
    clk : in std_logic;
    din : in std_logic;
    dout : out std_logic_vector(3 downto 0)
  );
end entity;

architecture behave of RXN_CNTRL is 
  signal s : std_logic_vector(3 downto 0) := "0000" ;
begin
  sipo : process (clk, reset)
  begin
    if (reset='1') then
      s <= "0000";
    elsif (rising_edge (clk)) then       
      s <= (din & s(3 downto 1));    
    end if;
  end process;

  dout <= s;

end architecture;
我无法理解VHDL&中的行s是如何连接运算符的。它用于将较小的数组和单个数组元素连接在一起(即将它们连接在一起),从而生成较大的数组。所以

 s <= (din & s(3 downto 1));
因此,你可以看到s被向右移动了一个位置,空的空间充满了嘈杂声——这正是你想要的SIPO行为

在VHDL中,我建议始终使用级联和切片的组合作为阵列的一部分,如s3到1用于实现移位寄存器等。内置操作符sla etc的行为方式很奇怪。

在VHDL&中是串联操作符。它用于将较小的数组和单个数组元素连接在一起(即将它们连接在一起),从而生成较大的数组。所以

 s <= (din & s(3 downto 1));
因此,你可以看到s被向右移动了一个位置,空的空间充满了嘈杂声——这正是你想要的SIPO行为

在VHDL中,我建议始终使用级联和切片的组合作为阵列的一部分,如s3到1用于实现移位寄存器等。内置运算符sla etc的行为方式很奇怪。

&是VHDL中的串联运算符

这样做的目的是将新接收到的位din从左移到s,处理s的最低位

假设s最初是0000。如果din='1',则s&是VHDL中的串联运算符

这样做的目的是将新接收到的位din从左移到s,处理s的最低位


假设s最初是0000。如果din='1',那么我修改了您的代码,以便它实际生成。希望你能看到这些编辑的原因;看起来大多数错误都是因为你为了这个问题试图缩小一个更大的实体。通过jeff所做的修改,你可以编写一个和来告诉赋值语句的作用。只要稍加研究,您还可以查找VHDL运算符,在这里您可以找到与并置运算符相关的信息,包括避免附加括号的优先级,例如IEEE Std 1076-2008 9.2.5添加运算符,9.2.1。谢谢@user1155120,这很有启发性,我也会检查的。我修改了你的代码,使它能够真正构建。希望你能看到这些编辑的原因;看起来大多数错误都是因为你为了这个问题试图缩小一个更大的实体。通过jeff所做的修改,你可以编写一个和来告诉赋值语句的作用。只要稍加研究,您还可以查找VHDL运算符,在那里您可以找到&串联运算符的信息,包括避免附加括号的优先级,例如IEEE Std 1076-2008 9.2.5添加运算符,9.2.1。谢谢@user1155120,这很有启发性,我们也会检查一下。