verilog设计?
作为硬件描述语言,Verilog HDL具有如下特点:
能够在不同的抽象层次上,如系统级、行为级、RTL(Register Transfer Level)级、 门级和开关级,对设计系统进行精确而简练的描述;
2. 能够在每个抽象层次的描述上对设计进行仿真验证,及时发现可能存在的设计错误, 缩短设计周期,并保证整个设计过程的正确性;
3. 由于代码描述与具体工艺实现无关,便于设计标准化,提高设计的可重用性。如果 有C语言的编程经验,只需很短的时间内就能学会和掌握Verilog HDL,因此,Verilog HDL可以作为学习HDL设计方法的入门和基础。
module counter_24 ( input clk, input rst, input cnt_in ,output reg cnt_out )
reg [4:0] cnt
always @ (posedge clk or posedge rst_n) begin
if (rst) cnt <= 5'b0
else if (~cnt_in) cnt <= cnt
else if (cnt == 5'b10110) cnt <= 5'b0
else cnt <= cnt + 1'b1
end
always @ (posedge clk or posedge rst) begin
if (rst) cnt_out <= 1'b0
else if (cnt_in &&cnt == 5'b10110) cnt_out <= 1'b1
else cnt_out <= 1'b0
end
endmodule
input add//为1时加操作
input dec//为1时减操作
output [5:0] counter
reg [5:0] counter
always @(add and dec) begin
if(add &&!dec) begin
if(counter == 6'd38) begin
counter <= 6'd0
扩展资料:
有一种记数系统便是24进制的,其中1~24有专门的符号来表示,大于24的数便可以像24进制那样写成多位数,如tokaputokapuŋgayepoko代表24进制中的P0(552)。malapu talusupuŋga talu代表24进制中的H2G(9856)。
为了避免混淆1和I,0和O,故跳过字母I、O,18~~23分别计作J、K、L、M、N、P。比如:16计作G、22计作N。
等于或大于24的数字计作:24→10、25→11、26→12??25→11中标粗体的1代表24。同一个数字在不同的位置代表的值是不一样的。
参考资料来源:百度百科-二十四进制
module counter_39{
add,
dec,
counter
}
input add//为1时加操作
input dec//为1时减操作
output [5:0] counter
reg [5:0] counter
always @(add and dec) begin
if(add &&!dec) begin
if(counter == 6'd38) begin
counter end
else begin
counter end
end
if(!add and dec) begin
if(counter == 6'd0) begin
counter end
else begin
counter end
end
end
endmodule
module decoder38(
input [2:0]code,
output reg[7:0]result
)
always@(*)
begin
case(code)
3'b000: result = 8'h01
3'b001: result = 8'h02
3'b010: result = 8'h04
3'b011: result = 8'h08
3'b100: result = 8'h10
3'b101: result = 8'h20
3'b110: result = 8'h40
3'b111: result = 8'h80
endcase
end
endmodule
module decoder38(
input [2:0]code,
output reg[7:0]result
)
always@(*)
begin
if(code[2])
if(code[1])
if(code[0])
result = 8'h80
else
result = 8'h40
else
if(code[0])
result = 8'h20
else
result = 8'h10
else
else
if(code[1])
if(code[0])
result = 8'h08
else
result = 8'h04
else
if(code[0])
result = 8'h02
else
result = 8'h01
else
end
endmodule
工作原理
使用Verilog描述硬件的基本设计单元是模块(module)。构建复杂的电子电路,主要是通过模块的相互连接调用来实现的。模块被包含在关键字module、endmodule之内。实际的电路元件。Verilog中的模块类似C语言中的函数,它能够提供输入、输出端口,可以实例调用其他模块,也可以被其他模块实例调用。模块中可以包括组合逻辑部分、过程时序部分。
以上内容参考:百度百科-Verilog HDL
(1)三段式描述:即现态(CS)、 次态(NS)、 输出逻辑(OL)各用一个always过程描述。
(2)两段式描述(CS+NS、OL双过程描述):使用两个always过程来描述有限状态机,一个过程描述现态和次态时序逻辑(CS+NS),另一个过程描述输出逻辑(OL)。
(3)两段式描述(CS、NS+OL双过程描述):一个过程描述现态(CS),另一个过程描述次态和输出逻辑(NS+OL)。
(4)单段式描述:在单段式描述方式中,将状态机的现态、次态和输出逻辑(CS+NS+OL)放在一个always过程中进行描述。
对于两段式描述,相当于-一个过程是由时钟信号触发的时序过程,时序过程对状态机的时钟信号敏感,当时钟发生有效跳变时,状态机的状态发生变化,一般用case语句检查状态机的当前状态,然后用if语句决定下一状态另一个过程是组合过程,在组合过程中根据当前状态给输出信号赋值,对于摩尔型(Moore) 状态机,其输出只与当前状态有关,因此只需用case语句描述即可对于米里型(Mealy) 状态机,其输出则与当前状态和当前输入都有关,因此,可以用case语句和if语句组合进行描述。双过程的描述方式结构清晰,并且把时序逻辑和组合逻辑分开进行描述,便于修改。
在单过程描述方式中,将有限状态机的现态、次态和输出逻辑(CS+NS+OL)放在一个过程中进行描述,这样做带来的好处是,相当于采用时钟信号来同步输出信号。因此,可以克服输出逻辑信号出现毛刺的问题,这在--些让输出信号作为控制逻辑的场合使用,就有效避免了输出信号带有毛刺,从而产生错误的控制逻辑的问题。但要注意的是,采用单过程描述方式,输出逻辑会比双过程描述方式的输出逻辑延迟--个时钟周期的时间。
2.概要设计(绘制流程图,状态转换图,状态卡诺图,粗略数据通道)
3.详细设计(细化数据通道,设计状态机,撰写代码)
4.调试与仿真(推荐modelsim观察仿真波形)
5.后仿真与修改(利用开发板观察实际逻辑功能)
6.撰写相关文档
一般来讲是这么多……