求:十进制减法计数器的Verilog HDL仿真测试程序

模块描述有了、但是要仿真、缺少测试模块、希望哪位大虾帮忙写下是以`timescale 1ns/1ns  这种形式开头的测试模块代码下面的是源程序module CNT10 (CLK, RST, EN, CQ, COUT); input CLK,RST,EN; output[3:0] CQ; output COUT; reg[3:0] CQ,CQI; reg COUT; always @(posedge CLK)//检测时钟上升沿 begin : u1 if (RST == 1'b1)//计数器复位 begin CQI={4{1'b0}}; end begin if(EN==1'b1)//检测是否允许计数 begin if (CQI<9) begin CQI=CQI+1; //允许计数 end else begin CQI={4{1'b0}}; //大于9,计数值清零 end end end if (CQI==9) begin COUT<=1'b1 ; //计数大于9,输出进位信号 end else begin COUT<=1'b0 ; end CQ<=CQI ; //将计数值向端口输出 end endmodule

用的是VHDL

该程序实现的功能:设计一个至少4位的十进制计数器,具有加减计数功能和置数功能,并能通过数码管显示计数结果。减数为零时发声报警。加数为9999时报警

----------这个程序中clk接1KHZ时个位每秒变化一下-------------

-----------D:\VHDL\test\test\four\three\4位数码管级联\加计数----------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

------------------------------------------

entity countup is

port(clk:in std_logic;

 clr:in std_logic;

 lad:in std_logic;

 en: in std_logic_vector(1 downto 0);

 clkup:in std_logic;

 sel:out std_logic_vector(1 downto 0); 

 din:in std_logic_vector(3 downto 0);         

 pout:buffer std_logic_vector(7 downto 0);

 speaker:out std_logic);

end entity countup;

-----------------------------------------------

architecture art of countup is

SIGNAL dout:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL dout0,dout1,dout2,dout3:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL counter:std_logic_vector(1 downto 0);

begin

-----------------进程1---------------------------------------------------

one: --这个进程是数码管从0变到9之后,数码管的位置在依次变化

process(clkup)is

begin

if(en="00")then

     if(clkup'event and clkup='1'  )then

    if clr='1' then dout0<="0000";dout1<="0000";dout2<="0000";dout3<="0000";

elsif lad='1' then dout0<=din;dout1<=din;dout2<=din;dout3<=din;

elsif(dout0>="1001")then dout0<="0000";     ---------显示个位数字

if(dout1>="1001")then dout1<="0000"; ---------显示十位数字

if(dout2>="1001")then dout2<="0000"; --------显示百位数字

if(dout3>="1001")then dout3<="0000";----显示千位数字

else dout3<=dout3+1;

end if;

else dout2<=dout2+1;

end if;

else dout1<=dout1+1;

end if;

else dout0<=dout0+1;

end if;

end if;

end if;

end process;

---------------------------------

process(clk) is

begin

if (clk'event and clk='1') then  

if(dout0="1001" and dout1="1001" and dout2="1001" and dout3="1001")then

speaker<='1'; else speaker<='0';                                    

end if;

end if;  

end process ;

------------------进程2---------------------------------------

two:

process(clk) is

begin

    if (clk'event and clk='1') then  

    ------------------------------------------------

counter<=counter+'1';                         ---

case counter is                                  ---

       when "00"=>dout<= dout1;               ---

       when "01"=>dout<= dout2;               ---

       when "10"=>dout<= dout3;               ---

       when "11"=>dout<= dout0;               ---

       when others=>NULL;         ---

   

    end case;                                        ---

   end if;

    ---------------------------------   

end process two;

sel<=counter;

-----------------进程3--------------------------------------------------

three:  --这个进程是进入一个时钟dout就加1,而在数码管上显示的数字就相应的加1;直到数码管从1变化到9

process(dout)is

begin

case dout is 

when "0000" => pout<="11111100";

when "0001" => pout<="01100000";

when "0010" => pout<="11011010";

when "0011" => pout<="11110010";

when "0100" => pout<="01100110";

when "0101" => pout<="10110110";

when "0110" => pout<="10111110";

when "0111" => pout<="11100100";

when "1000" => pout<="11111110";

when "1001" => pout<="11110110";

when others => pout<="00000001";

end case;

end process three;

-------------------------------------------------------------------

end architecture art;

----------- D:\VHDL\test\test\four\three\4位数码管级联\减计数--------

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

------------------------------------------

entity countdn is

port(clk:in std_logic;

 clr:in std_logic;

 lad:in std_logic;

 en: in std_logic_vector(1 downto 0);

 clkdn:in std_logic;

 sel:out std_logic_vector(1 downto 0); 

 din:in std_logic_vector(3 downto 0);         

 pout:buffer std_logic_vector(7 downto 0);

 speaker:out std_logic);

end entity countdn;

-----------------------------------------------

architecture art of countdn is

SIGNAL dout,pdout:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL dout5,dout6,dout7,dout8:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL counter:std_logic_vector(1 downto 0);

begin

-----------------进程1---------------------------------------------------

one1: --这个进程是数码管从0变到9之后,数码管的位置在依次变化

process(clkdn)is

begin

if en="01"then

if(dout6="0000" and dout7="0000" and dout8="0000" and dout5="0000")then

  speaker<='1';else speaker<='0';                                   

end if; 

    if(clkdn'event and clkdn='1'  )then

if clr='1' then dout5<="0000";dout6<="0000";dout7<="0000";dout8<="0000";

elsif lad='1' then dout5<=din;dout6<=din;dout7<=din;dout8<=din;

elsif(dout5="0000")then dout5<="1001";              ---------显示个位数字

if(dout6="0000")then dout6<="1001";          ---------显示十位数字

if(dout7="0000")then dout7<="1001";      ---------显示百位数字

if(dout8="0000")then dout8<="1001";  ---------显示千位数字

else dout8<=dout8-1;

end if;

else dout7<=dout7-1;

end if;

else dout6<=dout6-1;

end if;

else dout5<=dout5-1;

end if;

end if;

end if;

end process one1;

--------------进程2-------------------------------------------

two:

process(clk) is

begin

    if (clk'event and clk='1') then  

    ------------------------------------------------

counter<=counter+'1';                         ---

case counter is                                  ---

       when "00"=>dout<= dout6;      ---

       when "01"=>dout<= dout7;  ---

       when "10"=>dout<= dout8;        ---

       when "11"=>dout<= dout5;               ---

       when others=>NULL;         ---

    end case;                                        ---

   end if;

    ---------------------------------   

end process two;

sel<=counter;

-----------------进程3--------------------------------------------------

three:  --这个进程是进入一个时钟dout就加1,而在数码管上显示的数字就相应的加1;直到数码管从1变化到9

process(dout)is

begin

case dout is 

when "0000" => pout<="11111100";

when "0001" => pout<="01100000";

when "0010" => pout<="11011010";

when "0011" => pout<="11110010";

when "0100" => pout<="01100110";

when "0101" => pout<="10110110";

when "0110" => pout<="10111110";

when "0111" => pout<="11100100";

when "1000" => pout<="11111110";

when "1001" => pout<="11110110";

when others => pout<="00000001";

end case;

end process three;

-------------------------------------------------------------------

end architecture art;

------------pout2选1程序-----

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

------------------------------------------

entity pout is

port(a:in std_logic_vector(7 downto 0);  

 b:in std_logic_vector(7 downto 0); 

 c:out std_logic_vector(7 downto 0); 

 en:in std_logic_vector(1 downto 0)); 

end entity pout;

-----------------------------------------------

architecture art of pout is

begin

process(en,a,b)is

begin

if en="00"then c<=a;

else c<=b;

end if;

end process one1;

end architecture art;

------------sel2选1程序-----

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

------------------------------------------

entity sel is

port(a:in std_logic_vector(1 downto 0);  

 b:in std_logic_vector(1 downto 0); 

 c:out std_logic_vector(1 downto 0); 

 en:in std_logic_vector(1 downto 0)); 

end entity sel;

-----------------------------------------------

architecture art of sel is

begin

process(en,a,b)is

begin

if en="00"then c<=a;

else c<=b;

end if;

end process one1;

end architecture art;

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-02
帮你编辑后看了一下,错误及说明如下:
module CNT10 (CLK,
RST,
EN,
CQ,
COUT);
input CLK,RST,EN;
output[3:0] CQ;
output COUT;
reg[3:0] CQ,CQI;
reg COUT;

always @(posedge CLK)//检测时钟上升沿
begin : u1
if (RST == 1'b1)//计数器复位
begin
CQI={4{1'b0}};
end
begin

//下面的代码是组合逻辑还是时序逻辑?属于哪个always块?
if(EN==1'b1)//检测是否允许计数
begin
if (CQI<9)
begin
CQI=CQI+1; //允许计数 //如果是时序逻辑,为什么不用非阻塞赋值?如果是组合逻辑,就形成了组合循环,严重错误!
end
else
begin
CQI={4{1'b0}}; //大于9,计数值清零
end
end
end

//下面的代码与上面一样的错误!!!
if (CQI==9)
begin
COUT<=1'b1 ; //计数大于9,输出进位信号
end
else
begin
COUT<=1'b0 ;
end

CQ<=CQI ; //将计数值向端口输出

end

endmodule
总地来说,这是一段无法仿真的代码,错误太多,完全不符合verilog语法规则。
第2个回答  2011-11-02
这种不编辑的代码连耶稣都看不懂....

求:十进制减法计数器的Verilog HDL仿真测试程序
用的是VHDL 该程序实现的功能:设计一个至少4位的十进制计数器,具有加减计数功能和置数功能,并能通过数码管显示计数结果。减数为零时发声报警。加数为9999时报警 ---这个程序中clk接1KHZ时个位每秒变化一下--- ---D:\\VHDL\\test\\test\\four\\three\\4位数码管级联\\加计数--- library ieee;use iee...

我做verilog HDL的练习题,简单时序逻辑电路的设计,在quartus中做的代码...
在modelsim下创建testbench的时候,由source——>show language templates可以得到测试模块的模板,只需对输入进行定义和初始化,以下是我做修改后在modelsim6.2下的测试模块的程序:

verilog HDL编程
去年做过这个,给你我的程序你参考看看,能调的通。1.设计要求设计一个数字时钟,要求用数码管分别显示时、分、秒的计数,同时可以进行时间设置,并且设置的时间显示要求闪烁。2.设计原理计数器在正常工作下是对1Hz的频率计数,在调整时间状态下是对需要调整的时间模块进行计数;控制按键用来选择是正常计数还是调整时间并决...

Verilog HDL 高手进。。
这些都是verilog HDL基础程序,建议楼主自己写写吧,不难的。如果真的不懂,百度一下,网上很多这类的程序。不过这些练习,书本里面应该会有的,自己多动手,多想才会学到,希望楼主努力

verilog 8位计数器
回答:将clk=0;去掉

用modelsim仿真后,怎样导出某一波形的数据
你要写一个测试程序以一个十进制计数器做例子吧:module counter10(Q, nCR, EN, CP);其中,Q是计数器的输出,nCR是清零信号,EN是计数使能信号,CP是输入的时钟步骤大概是:1.新建一个.v文件,比方说我新建一个test.v文件,第一行是module test();2.将输入信号定义成reg型,将输出信号定义成wire型(必须这么做...

急求:Verilog HDL的8位或者16位计数器
always @ (posedge clk )begin if(!rst)begin out<=8'b00000000;end else out<=out+1;end endmodule 以上是8位计数器,16位计数器相同道理 然后再加上个 显示电路 module dis(in,out);intpu[7:0] in;output[7:0] out;reg[7:0] out;always @ (in)begin case (in)8'b0: out<=...

Verilog循环语句
在Verilog HDL中存在着四种类型的循环语句,用来控制执行语句的执行次数。其语法和用途与C语言很类似 forever语句的格式如下:forever循环语句常用于产生周期性的波形,用来作为仿真测试信号。它与always语句不同处在于不能独立写在程序中,而必须写在initial块中。forever循环的应用示例如下:repeat语句的格式...

新手求助,verilog hdl要设计一个带异步清零和异步预置的8 位二进制...
新手求助,verilog hdl要设计一个带异步清零和异步预置的8 位二进制加法计数器,麻烦看看代码哪儿错了。。 10 想了半天了,编译错误里面总是提示 Error (10170): Verilog HDL syntax error at Verilog1.v(11) near text ? Error (10170): Verilog HDL syntax error at Verilog1.v(11) near text "?; ...

关于Verilog hdl 中循环语句forever编译错误的疑问。
Verilog 这个语言有两个部分,一部分是可综合的用来生成电路,一部分是不可综合的用来写testbench(测试脚本)。你贴的程序是不能综合的那部分,是testbench。不能综合的那部分非常的接近C语言,适合写测试文件。我在网上看了一下,你是参考的《基于Verilog HDL设计的多功能数字钟》这篇论文 你贴的这...

相似回答