模块描述有了、但是要仿真、缺少测试模块、希望哪位大虾帮忙写下是以`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;
求:十进制减法计数器的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设计的多功能数字钟》这篇论文 你贴的这...