找回密码
 注册
关于网站域名变更的通知
查看: 749|回复: 4
打印 上一主题 下一主题

怎样用VHDL写testbench

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-2-13 09:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
怎样用VHDL写testbench+ N$ Z+ ?2 S7 M3 M6 D: Q
游客,如果您要查看本帖隐藏内容请回复
/ u* n3 t( R  P

该用户从未签到

3#
发表于 2023-12-20 10:08 | 只看该作者

该用户从未签到

4#
发表于 2024-1-13 22:04 | 只看该作者
library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all;  entity step_motor is port (reset:in STD_LOGIC; --系统复位信号       dir: in STD_LOGIC; --方向控制信号       clk: in STD_LOGIC; --系统时钟信号       ini: in STD_LOGIC; --初始化使能信号        manner: in STD_LOGIC_VECTOR (1 downto 0); --激磁方式的选择开关       angle: in INTEGER range 255 downto 0; --步进角的倍数设定输入       baBA: out STD_LOGIC_VECTOR (3 downto 0)); --步进电机状态输出 end step_motor;  architecture stepmotor_arch of step_motor is signal count: INTEGER range 0 to 7; --计数器  signal cntInc: INTEGER range -2 to 2; --设定累加器所需的累(加/减)计数值 signal cc : integer range 0 to 3; signal cntIni: INTEGER range -1 to 0; --设定累加器所需的计数初值 signal angleDnCount: INTEGER range 255 downto 0;  --计算已经转过的步进角 signal angleDnCntDec: INTEGER range 2 downto 1;  begin    process(dir, manner, angle)--, ini)   begin       --if ini='1' then       cc<=conv_integer(manner);       if dir='0' then                   case cc is               when 1 => -- 1-相激励                   --count<=0;                   cntIni<=0;                   cntInc<=2;                   angleDnCntDec<=2;--"10";               when 2 => -- 2-相激励                   --count<=7;                   cntIni<=-1;                   cntInc<=2;                   angleDnCntDec<=2;--"10";                  when 3 => -- 1-2相激励                   --count<=0;                   cntIni<=0;                   cntInc<=1;                   angleDnCntDec<=1;--"01";                   when 0 => --manner="00" autodetect                                if (angle rem 2) =1 then -- 2-相激励                   --count<=7;                   cntIni<=-1;                       cntInc<=2;                       angleDnCntDec<=2;--"10";                     else -- 1-相激励                                      --count<=0;                   cntIni<=0;                       cntInc<=2;                       angleDnCntDec<=2;--"10";                   end if; --angle           end case; --manner       else -- if dir='1'           case cc is                when 1 => -- 1-相激励                   --count<=0;                   cntIni<=0;                   cntInc<=-2;                   angleDnCntDec<=2;--"10";               when 2 => -- 2-相激励                   --count<=7;                   cntIni<=-1;                   cntInc<=-2;                   angleDnCntDec<=2;--"10";                  when 3 => -- 1-2相激励                   --count<=0;                   cntIni<=0;                   cntInc<=-1;                   angleDnCntDec<=1;--"01";                   when 0 => --manner="00" autodetect                                if (angle rem 2) = 1 then -- 2-相激励                       cntIni<=-1;                       cntInc<=-2;                       angleDnCntDec<=2;--"10";                     else -- 1-相激励                                          cntIni<=0;                       cntInc<=-2;                       angleDnCntDec<=2;--"10";                   end if; --angle           end case; --manner       end if; -- else dir=0       --end if; -- ini   end process;    counting_reset: process(reset,ini, angle, clk)   begin       if reset='1' then          count<=0;          angleDnCount<=0;        elsif clk'event and clk='1' then           if ini='0' then               count<=0+cntIni;               angleDnCount<=angle;           else               count <= count+cntInc;               if angleDnCount > angleDnCntDec then                   angleDnCount <= angleDnCount-angleDnCntDec;               else                   angleDnCount <= 0;               end if;            end if;       end if;   end process;     baBA <="0000" when angleDnCount=0 else          "0001" when count=0 else          "0011" when count=1 else          "0010" when count=2 else          "0110" when count=3 else          "0100" when count=4 else       library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all;  entity step_motor is port (reset:in STD_LOGIC; --系统复位信号       dir: in STD_LOGIC; --方向控制信号       clk: in STD_LOGIC; --系统时钟信号       ini: in STD_LOGIC; --初始化使能信号        manner: in STD_LOGIC_VECTOR (1 downto 0); --激磁方式的选择开关       angle: in INTEGER range 255 downto 0; --步进角的倍数设定输入       baBA: out STD_LOGIC_VECTOR (3 downto 0)); --步进电机状态输出 end step_motor;  architecture stepmotor_arch of step_motor is signal count: INTEGER range 0 to 7; --计数器  signal cntInc: INTEGER range -2 to 2; --设定累加器所需的累(加/减)计数值 signal cc : integer range 0 to 3; signal cntIni: INTEGER range -1 to 0; --设定累加器所需的计数初值 signal angleDnCount: INTEGER range 255 downto 0;  --计算已经转过的步进角 signal angleDnCntDec: INTEGER range 2 downto 1;  begin    process(dir, manner, angle)--, ini)   begin       --if ini='1' then       cc<=conv_integer(manner);       if dir='0' then                   case cc is               when 1 => -- 1-相激励                   --count<=0;                   cntIni<=0;                   cntInc<=2;                   angleDnCntDec<=2;--"10";               when 2 => -- 2-相激励                   --count<=7;                   cntIni<=-1;                   cntInc<=2;                   angleDnCntDec<=2;--"10";                  when 3 => -- 1-2相激励                   --count<=0;                   cntIni<=0;                   cntInc<=1;                   angleDnCntDec<=1;--"01";                   when 0 => --manner="00" autodetect                                if (angle rem 2) =1 then -- 2-相激励                   --count<=7;                   cntIni<=-1;                       cntInc<=2;                       angleDnCntDec<=2;--"10";                     else -- 1-相激励                                      --count<=0;                   cntIni<=0;                       cntInc<=2;                       angleDnCntDec<=2;--"10";                   end if; --angle           end case; --manner       else -- if dir='1'           case cc is                when 1 => -- 1-相激励                   --count<=0;                   cntIni<=0;                   cntInc<=-2;                   angleDnCntDec<=2;--"10";               when 2 => -- 2-相激励                   --count<=7;                   cntIni<=-1;                   cntInc<=-2;                   angleDnCntDec<=2;--"10";                  when 3 => -- 1-2相激励                   --count<=0;                   cntIni<=0;                   cntInc<=-1;                   angleDnCntDec<=1;--"01";                   when 0 => --manner="00" autodetect                                if (angle rem 2) = 1 then -- 2-相激励                       cntIni<=-1;                       cntInc<=-2;                       angleDnCntDec<=2;--"10";                     else -- 1-相激励                                          cntIni<=0;                       cntInc<=-2;                       angleDnCntDec<=2;--"10";                   end if; --angle           end case; --manner       end if; -- else dir=0       --end if; -- ini   end process;    counting_reset: process(reset,ini, angle, clk)   begin       if reset='1' then          count<=0;          angleDnCount<=0;        elsif clk'event and clk='1' then           if ini='0' then               count<=0+cntIni;               angleDnCount<=angle;           else               count <= count+cntInc;               if angleDnCount > angleDnCntDec then                   angleDnCount <= angleDnCount-angleDnCntDec;               else                   angleDnCount <= 0;               end if;            end if;       end if;   end process;     baBA <="0000" when angleDnCount=0 else          "0001" when count=0 else          "0011" when count=1 else          "0010" when count=2 else          "0110" when count=3 else          "0100" when count=4 else          "1100" when count=5 else          "1000" when count=6 else          "1001";-- when count>=7;  end stepmotor_arch;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-20 03:10 , Processed in 0.171875 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表