verilog实现C的逻辑(一小部分代码,以后有时间会经常发布)
for(i=0;i
#define N 20
void fun1(void);
int main()
{
fun1();
return 0;
}
void fun1(void)
{
int f1,f2;
int f;
int i;
f1=1;
f2=1;
for(i=0;i<N-1;i++){
f=f2;
f2=f1+f2;
f1=f;
}
printf("%d\n",f2);
}
verilog版本(未调试):
module test(
input rst,
input clk,
output dout_valid,
output reg[15:0] dout
);
parameter N=17;
reg[4:0] count;
reg[15:0] sum_reg1;
reg[15:0] sum_reg2;
wire signed[16:0] sum1;
wire signed[15:0] sum2;
always @(negedge rst,posedge clk) begin
if(!rst) begin
count<='d0;
end
else if(count<N) begin
count<=count+'d1;
end
else begin
count<=count;
end
end
always @(negedge rst,posedge clk) begin
if(!rst) begin
sum_reg1<='d1;
sum_reg2<='d1
end
else begin
sum_reg1<=sum2;
sum_reg2<=sum_reg1;
end
end
assign sum1=sum1_reg1+sum2_reg2;
assign sum2=(sum1[16:15]==2'b00 || sum1[16:15]==2'b11)?sum1[15:0]:(sum1[16])?16'h8000:16'h7fff;
assign dout_valid=(count==N)?1'b1:1'b0;
always @(negedge rst,posedge clk) begin
if(!rst) begin
dout<='d0;
end
else if(count==N-1) begin
dout<=sum2;
end
else begin
dout<=dout;
end
end
endmodule
怎么只显示一半?
什么意思?哪个是只显示一半的
